Skip to content

Commit 44115de

Browse files
Add support factory and commissionable data provisioning with the use of librairies
1 parent ce71ed5 commit 44115de

27 files changed

+2548
-165
lines changed

examples/platform/silabs/BaseApplication.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@
2424
#include "AppConfig.h"
2525
#include "AppEvent.h"
2626
#include "AppTask.h"
27-
2827
#include <app/server/Server.h>
2928

29+
#define APP_ACTION_BUTTON 1
30+
3031
#ifdef DISPLAY_ENABLED
3132
#include "lcd.h"
3233
#ifdef QR_CODE_ENABLED
3334
#include "qrcodegen.h"
3435
#endif // QR_CODE_ENABLED
3536
#endif // DISPLAY_ENABLED
3637

37-
#include "SilabsDeviceDataProvider.h"
3838
#if CHIP_CONFIG_ENABLE_ICD_SERVER == 1
3939
#include <app/icd/server/ICDNotifier.h> // nogncheck
4040
#endif
@@ -43,6 +43,7 @@
4343
#include <assert.h>
4444
#include <lib/support/CodeUtils.h>
4545
#include <platform/CHIPDeviceLayer.h>
46+
#include <ProvisionManager.h>
4647
#include <setup_payload/QRCodeSetupPayloadGenerator.h>
4748
#include <setup_payload/SetupPayload.h>
4849
#include <sl_cmsis_os2_common.h>
@@ -744,6 +745,11 @@ void BaseApplication::DispatchEvent(AppEvent * aEvent)
744745
void BaseApplication::ScheduleFactoryReset()
745746
{
746747
PlatformMgr().ScheduleWork([](intptr_t) {
748+
// Press both buttons to request provisioning
749+
if (GetPlatform().GetButtonState(APP_ACTION_BUTTON))
750+
{
751+
Provision::Manager::GetInstance().SetProvisionRequired(true);
752+
}
747753
PlatformMgr().HandleServerShuttingDown();
748754
ConfigurationMgr().InitiateFactoryReset();
749755
});
@@ -765,7 +771,8 @@ void BaseApplication::OutputQrCode(bool refreshLCD)
765771
char setupPayloadBuffer[chip::QRCodeBasicSetupPayloadGenerator::kMaxQRCodeBase38RepresentationLength + 1];
766772
chip::MutableCharSpan setupPayload(setupPayloadBuffer);
767773

768-
if (Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider().GetSetupPayload(setupPayload) == CHIP_NO_ERROR)
774+
CHIP_ERROR err = Provision::Manager::GetInstance().GetStorage().GetSetupPayload(setupPayload);
775+
if (CHIP_NO_ERROR == err)
769776
{
770777
// Print setup info on LCD if available
771778
#ifdef QR_CODE_ENABLED

examples/platform/silabs/MatterConfig.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@
5656
static chip::DeviceLayer::Internal::Efr32PsaOperationalKeystore gOperationalKeystore;
5757
#endif
5858

59-
#include "SilabsDeviceDataProvider.h"
6059
#include <app/InteractionModelEngine.h>
6160
#include <app/TimerDelegates.h>
61+
#include <ProvisionManager.h>
6262

6363
#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
6464
#include "SilabsTestEventTriggerDelegate.h" // nogncheck
@@ -80,8 +80,6 @@ static chip::DeviceLayer::Internal::Efr32PsaOperationalKeystore gOperationalKeys
8080

8181
#include <DeviceInfoProviderImpl.h>
8282
#include <app/server/Server.h>
83-
#include <credentials/DeviceAttestationCredsProvider.h>
84-
#include <examples/platform/silabs/SilabsDeviceAttestationCreds.h>
8583

8684
#include <platform/silabs/platformAbstraction/SilabsPlatform.h>
8785

@@ -92,7 +90,7 @@ static chip::DeviceLayer::Internal::Efr32PsaOperationalKeystore gOperationalKeys
9290
using namespace ::chip;
9391
using namespace ::chip::Inet;
9492
using namespace ::chip::DeviceLayer;
95-
using namespace ::chip::Credentials::Silabs;
93+
using namespace ::chip::Credentials;
9694
using namespace chip::DeviceLayer::Silabs;
9795

9896
#if CHIP_ENABLE_OPENTHREAD
@@ -174,7 +172,7 @@ void ApplicationStart(void * unused)
174172

175173
chip::DeviceLayer::PlatformMgr().LockChipStack();
176174
// Initialize device attestation config
177-
SetDeviceAttestationCredentialsProvider(Credentials::Silabs::GetSilabsDacProvider());
175+
SetDeviceAttestationCredentialsProvider(&Provision::Manager::GetInstance().GetStorage());
178176
chip::DeviceLayer::PlatformMgr().UnlockChipStack();
179177

180178
SILABS_LOG("Starting App Task");
@@ -190,7 +188,6 @@ void ApplicationStart(void * unused)
190188
void SilabsMatterConfig::AppInit()
191189
{
192190
GetPlatform().Init();
193-
194191
sMainTaskHandle = osThreadNew(ApplicationStart, nullptr, &kMainTaskAttr);
195192
SILABS_LOG("Starting scheduler");
196193
VerifyOrDie(sMainTaskHandle); // We can't proceed if the Main Task creation failed.
@@ -257,8 +254,11 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
257254

258255
ReturnErrorOnFailure(PlatformMgr().InitChipStack());
259256

260-
SetDeviceInstanceInfoProvider(&Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider());
261-
SetCommissionableDataProvider(&Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider());
257+
// Provision Manager
258+
Silabs::Provision::Manager & provision = Silabs::Provision::Manager::GetInstance();
259+
ReturnErrorOnFailure(provision.Init());
260+
SetDeviceInstanceInfoProvider(&provision.GetStorage());
261+
SetCommissionableDataProvider(&provision.GetStorage());
262262

263263
chip::DeviceLayer::ConnectivityMgr().SetBLEDeviceName(appName);
264264

examples/platform/silabs/SiWx917/BUILD.gn

+5-49
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,9 @@ source_set("test-event-trigger") {
8686
"${silabs_common_plat_dir}/SilabsTestEventTriggerDelegate.h",
8787
]
8888

89+
deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
8990
public_configs = [ ":test-event-trigger-config" ]
90-
9191
public_deps = [
92-
":silabs-factory-data-provider",
9392
"${chip_root}/src/app:test-event-trigger",
9493
"${chip_root}/src/lib/core",
9594
"${chip_root}/src/lib/support",
@@ -114,46 +113,9 @@ source_set("siwx917-matter-shell") {
114113
}
115114
}
116115

117-
config("attestation-credentials-config") {
118-
include_dirs = [ "${chip_root}" ]
119-
}
120-
121-
source_set("siwx917-attestation-credentials") {
122-
sources = [
123-
"${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.cpp",
124-
"${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.h",
125-
]
126-
127-
public_deps = [
128-
"${chip_root}/src/credentials",
129-
"${chip_root}/src/platform:platform_base",
130-
]
131-
132-
public_configs = [ ":attestation-credentials-config" ]
133-
}
134-
135-
source_set("silabs-factory-data-provider") {
136-
sources = [
137-
"${silabs_common_plat_dir}/SilabsDeviceDataProvider.cpp",
138-
"${silabs_common_plat_dir}/SilabsDeviceDataProvider.h",
139-
]
140-
141-
public_deps = [
142-
"${chip_root}/src/credentials",
143-
"${chip_root}/src/lib/support",
144-
"${chip_root}/src/platform:platform_base",
145-
"${chip_root}/src/setup_payload",
146-
]
147-
148-
public_configs = [ ":siwx917-common-config" ]
149-
150-
if (sl_enable_test_event_trigger) {
151-
public_configs += [ ":test-event-trigger-config" ]
152-
}
153-
}
154-
155116
config("siwx917-common-config") {
156117
defines = [ "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_sec}" ]
118+
libs = [ "${sdk_support_root}/matter/provision/lib/libProvision_si917.a" ]
157119

158120
if (!disable_lcd) {
159121
include_dirs = [ "${silabs_common_plat_dir}/display" ]
@@ -210,7 +172,7 @@ config("silabs-wifi-config") {
210172
}
211173

212174
source_set("siwx917-common") {
213-
deps = []
175+
deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
214176
defines = []
215177
public_deps = []
216178
public_configs = [
@@ -229,6 +191,8 @@ source_set("siwx917-common") {
229191
"${silabs_common_plat_dir}/LEDWidget.cpp",
230192
"${silabs_common_plat_dir}/MatterConfig.cpp",
231193
"${silabs_common_plat_dir}/SoftwareFaultReports.cpp",
194+
"${silabs_common_plat_dir}/provision/ProvisionStorageCustom.cpp",
195+
"${silabs_common_plat_dir}/provision/ProvisionStorageFlash.cpp",
232196
"${silabs_common_plat_dir}/silabs_utils.cpp",
233197
"${silabs_common_plat_dir}/syscalls_stubs.cpp",
234198
"${silabs_plat_si91x_wifi_dir}/dhcp_client.cpp",
@@ -282,14 +246,6 @@ source_set("siwx917-common") {
282246
]
283247
}
284248

285-
# Attestation Credentials
286-
deps += [ ":siwx917-attestation-credentials" ]
287-
288-
# Factory Data Provider
289-
if (use_efr32_factory_data_provider) {
290-
public_deps += [ ":silabs-factory-data-provider" ]
291-
}
292-
293249
public_deps += [
294250
"${chip_root}/examples/providers:device_info_provider",
295251
"${chip_root}/src/lib",

examples/platform/silabs/SilabsTestEventTriggerDelegate.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
#include "SilabsTestEventTriggerDelegate.h"
20-
#include "SilabsDeviceDataProvider.h"
20+
#include <ProvisionManager.h>
2121

2222
using namespace ::chip::DeviceLayer;
2323

@@ -30,7 +30,7 @@ bool SilabsTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableK
3030

3131
// Return false if we were not able to get the enableKey
3232
VerifyOrReturnValue(
33-
Silabs::SilabsDeviceDataProvider::GetDeviceDataProvider().GetTestEventTriggerKey(enableKeySpan) == CHIP_NO_ERROR, false);
33+
Silabs::Provision::Manager::GetInstance().GetStorage().GetTestEventTriggerKey(enableKeySpan) == CHIP_NO_ERROR, false);
3434

3535
return (!enableKeySpan.empty() && enableKeySpan.data_equal(enableKey));
3636
}

examples/platform/silabs/efr32/BUILD.gn

+9-47
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,9 @@ source_set("test-event-trigger") {
103103
"${silabs_common_plat_dir}/SilabsTestEventTriggerDelegate.h",
104104
]
105105

106+
deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
106107
public_configs = [ ":test-event-trigger-config" ]
107-
108108
public_deps = [
109-
":silabs-factory-data-provider",
110109
"${chip_root}/src/app:test-event-trigger",
111110
"${chip_root}/src/lib/core",
112111
"${chip_root}/src/lib/support",
@@ -147,44 +146,11 @@ source_set("efr-matter-shell") {
147146
}
148147
}
149148

150-
config("attestation-credentials-config") {
151-
include_dirs = [ "${chip_root}" ]
152-
}
153-
154-
source_set("efr32-attestation-credentials") {
155-
sources = [
156-
"${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.cpp",
157-
"${silabs_common_plat_dir}/SilabsDeviceAttestationCreds.h",
158-
]
159-
160-
public_deps = [
161-
"${chip_root}/src/credentials",
162-
"${chip_root}/src/platform:platform_base",
163-
]
164-
165-
public_configs = [ ":attestation-credentials-config" ]
166-
}
167-
168-
source_set("silabs-factory-data-provider") {
169-
sources = [
170-
"${silabs_common_plat_dir}/SilabsDeviceDataProvider.cpp",
171-
"${silabs_common_plat_dir}/SilabsDeviceDataProvider.h",
172-
]
173-
174-
public_deps = [
175-
"${chip_root}/src/credentials",
176-
"${chip_root}/src/lib/support",
177-
"${chip_root}/src/platform:platform_base",
178-
"${chip_root}/src/setup_payload",
179-
]
180-
181-
if (sl_enable_test_event_trigger) {
182-
public_configs = [ ":test-event-trigger-config" ]
183-
}
184-
}
185-
186149
config("efr32-common-config") {
187150
defines = [ "OTA_PERIODIC_TIMEOUT=${ota_periodic_query_timeout_sec}" ]
151+
libs = [
152+
"${sdk_support_root}/matter/provision/lib/libProvision_${silabs_family}.a",
153+
]
188154

189155
if (!disable_lcd) {
190156
include_dirs = [ "${silabs_common_plat_dir}/display" ]
@@ -246,13 +212,15 @@ config("silabs-wifi-config") {
246212
}
247213

248214
source_set("efr32-common") {
249-
deps = []
215+
deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ]
250216
defines = []
251217
public_deps = []
252218
public_configs = [
253219
":efr32-common-config",
254220
"${efr32_sdk_build_root}:silabs_config",
255221
":chip_examples_project_config",
222+
223+
"${chip_root}/src/platform/silabs/provision:provision-config",
256224
]
257225

258226
# DIC
@@ -275,6 +243,8 @@ source_set("efr32-common") {
275243
"${silabs_common_plat_dir}/LEDWidget.cpp",
276244
"${silabs_common_plat_dir}/MatterConfig.cpp",
277245
"${silabs_common_plat_dir}/SoftwareFaultReports.cpp",
246+
"${silabs_common_plat_dir}/provision/ProvisionStorageCustom.cpp",
247+
"${silabs_common_plat_dir}/provision/ProvisionStorageDefault.cpp",
278248
"${silabs_common_plat_dir}/silabs_utils.cpp",
279249
"${silabs_common_plat_dir}/syscalls_stubs.cpp",
280250
]
@@ -339,14 +309,6 @@ source_set("efr32-common") {
339309
deps += [ ":efr-matter-shell" ]
340310
}
341311

342-
# Attestation Credentials
343-
public_deps += [ ":efr32-attestation-credentials" ]
344-
345-
# Factory Data Provider
346-
if (use_efr32_factory_data_provider) {
347-
public_deps += [ ":silabs-factory-data-provider" ]
348-
}
349-
350312
public_deps += [
351313
"${chip_root}/examples/providers:device_info_provider",
352314
"${chip_root}/src/app/server",

0 commit comments

Comments
 (0)