Skip to content

Commit 4d2388a

Browse files
[Closures] [Silabs] Enable testevent trigger for closure app on 917and EFR platforms (project-chip#40301)
* Enable testevent trigger for closure on 917 platofrm and EFR * PR comments * Restyled by clang-format * Address PR comments * Restyled by clang-format * PR comments * Restyled by clang-format --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 0c58d31 commit 4d2388a

File tree

5 files changed

+68
-10
lines changed

5 files changed

+68
-10
lines changed

examples/closure-app/silabs/build_for_wifi_args.gni

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ silabs_sdk_target = get_label_info(":sdk", "label_no_toolchain")
1717
chip_enable_openthread = false
1818
import("${chip_root}/src/platform/silabs/wifi/args.gni")
1919

20-
sl_enable_test_event_trigger = false
20+
sl_enable_test_event_trigger = true
2121
chip_enable_ota_requestor = false
2222
app_data_model = "${chip_root}/examples/closure-app/closure-common"

examples/closure-app/silabs/openthread.gni

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ app_data_model = "${chip_root}/examples/closure-app/closure-common"
2222
chip_enable_ota_requestor = false
2323
chip_enable_openthread = true
2424
disable_lcd = true
25-
sl_enable_test_event_trigger = false
25+
sl_enable_test_event_trigger = true
2626

2727
openthread_external_platform =
2828
"${chip_root}/third_party/openthread/platforms/efr32:libopenthread-efr32"

examples/closure-app/silabs/src/ClosureManager.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "ClosureDimensionEndpoint.h"
2424

2525
#include <app-common/zap-generated/cluster-objects.h>
26+
#include <app/server/Server.h>
2627
#include <app/util/attribute-storage.h>
2728
#include <lib/support/TimeUtils.h>
2829
#include <platform/CHIPDeviceLayer.h>
@@ -114,6 +115,21 @@ void ClosureManager::Init()
114115
VerifyOrDie(SetClosurePanelInitialState(mClosurePanelEndpoint3) == CHIP_NO_ERROR);
115116
ChipLogProgress(AppServer, "Initial state for Closure Panel Endpoint 3 set successfully");
116117

118+
TestEventTriggerDelegate * pTestEventDelegate = Server::GetInstance().GetTestEventTriggerDelegate();
119+
120+
if (pTestEventDelegate != nullptr)
121+
{
122+
CHIP_ERROR err = pTestEventDelegate->AddHandler(&mClosureEndpoint1.GetDelegate());
123+
if (err != CHIP_NO_ERROR)
124+
{
125+
ChipLogError(AppServer, "Failed to add handler for delegate: %s", chip::ErrorStr(err));
126+
}
127+
}
128+
else
129+
{
130+
ChipLogError(AppServer, "TestEventTriggerDelegate is null, cannot add handler for delegate");
131+
}
132+
117133
DeviceLayer::PlatformMgr().UnlockChipStack();
118134
}
119135

examples/platform/silabs/provision/BUILD.gn

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ source_set("storage") {
5050

5151
deps = [ "${chip_root}/src/lib" ]
5252

53-
public_deps = [ "${sl_provision_root}:headers" ]
53+
public_deps = [
54+
"${chip_root}/src/app:test-event-trigger",
55+
"${sl_provision_root}:headers",
56+
]
5457

5558
if (sl_enable_test_event_trigger) {
5659
public_configs = [ "${chip_root}/examples/platform/silabs/test-event-trigger:test-event-trigger-config" ]

examples/platform/silabs/provision/ProvisionStorageFlash.cpp

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <headers/ProvisionEncoder.h>
2121
#include <headers/ProvisionStorage.h>
2222
#include <lib/core/CHIPEncoding.h>
23+
#include <lib/support/BytesToHex.h>
2324
#include <lib/support/CHIPMemString.h>
2425
#include <lib/support/CodeUtils.h>
2526
#include <platform/CHIPDeviceConfig.h>
@@ -29,6 +30,8 @@
2930
#include <platform/silabs/multi-ota/OtaTlvEncryptionKey.h>
3031
#endif // SL_MATTER_ENABLE_OTA_ENCRYPTION
3132

33+
#include <app/TestEventTriggerDelegate.h>
34+
3235
#if !(SL_MATTER_GN_BUILD || defined(SL_PROVISION_GENERATOR))
3336
#include <sl_matter_provision_config.h>
3437
#endif
@@ -752,23 +755,59 @@ CHIP_ERROR Storage::SetOtaTlvEncryptionKey(const ByteSpan & value)
752755
}
753756
#endif // SL_MATTER_ENABLE_OTA_ENCRYPTION
754757

758+
#if defined(SL_MATTER_TEST_EVENT_TRIGGER_ENABLED) && SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
755759
CHIP_ERROR Storage::SetTestEventTriggerKey(const ByteSpan & value)
756760
{
757-
// TODO: Implement this function if needed.
758-
return CHIP_ERROR_NOT_IMPLEMENTED;
761+
// Verify that the provided key has the correct length
762+
VerifyOrReturnError(value.size() == TestEventTriggerDelegate::kEnableKeyLength, CHIP_ERROR_INVALID_ARGUMENT);
763+
764+
// Write the key to the configuration storage
765+
return Flash::Set(Parameters::ID::kTestEventTriggerKey, value.data(), value.size());
759766
}
760767

761768
CHIP_ERROR Storage::GetTestEventTriggerKey(MutableByteSpan & keySpan)
762769
{
763-
#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
764-
// TODO: Implement Getter
765-
// Adding the same return twice to have the function structure
770+
CHIP_ERROR err = CHIP_NO_ERROR;
771+
size_t keyLength = 0;
772+
773+
VerifyOrReturnError(keySpan.size() >= TestEventTriggerDelegate::kEnableKeyLength, CHIP_ERROR_BUFFER_TOO_SMALL);
774+
775+
err = Flash::Get(Parameters::ID::kTestEventTriggerKey, keySpan.data(), TestEventTriggerDelegate::kEnableKeyLength, keyLength);
776+
777+
#ifndef NDEBUG
778+
#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLE_KEY
779+
if (CHIP_DEVICE_ERROR_CONFIG_NOT_FOUND == err)
780+
{
781+
constexpr char enableKey[] = SL_MATTER_TEST_EVENT_TRIGGER_ENABLE_KEY;
782+
if (chip::Encoding::HexToBytes(enableKey, strlen(enableKey), keySpan.data(), TestEventTriggerDelegate::kEnableKeyLength) !=
783+
TestEventTriggerDelegate::kEnableKeyLength)
784+
{
785+
// enableKey Hex String doesn't have the correct length
786+
memset(keySpan.data(), 0, keySpan.size());
787+
return CHIP_ERROR_INTERNAL;
788+
}
789+
}
790+
return CHIP_NO_ERROR;
791+
#endif // SL_MATTER_TEST_EVENT_TRIGGER_ENABLE_KEY
792+
#endif // NDEBUG
793+
794+
keySpan.reduce_size(TestEventTriggerDelegate::kEnableKeyLength);
795+
return err;
796+
}
797+
798+
#else // SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
799+
800+
CHIP_ERROR Storage::SetTestEventTriggerKey(const ByteSpan & value)
801+
{
766802
return CHIP_ERROR_NOT_IMPLEMENTED;
767-
#else
803+
}
804+
CHIP_ERROR Storage::GetTestEventTriggerKey(MutableByteSpan & keySpan)
805+
{
768806
return CHIP_ERROR_NOT_IMPLEMENTED;
769-
#endif // SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
770807
}
771808

809+
#endif // SL_MATTER_TEST_EVENT_TRIGGER_ENABLED
810+
772811
} // namespace Provision
773812
} // namespace Silabs
774813
} // namespace DeviceLayer

0 commit comments

Comments
 (0)