[ESP32] Add Kconfig Option for TestEventTrigger (#22809)
* ESP32: Add Kconfig Option for TestEventTrigger Command
* fix compile error of bridge example
Co-authored-by: Andrei Litvin <andy314@gmail.com>
diff --git a/config/esp32/components/chip/Kconfig b/config/esp32/components/chip/Kconfig
index 57ace57..3ce6c9c 100644
--- a/config/esp32/components/chip/Kconfig
+++ b/config/esp32/components/chip/Kconfig
@@ -722,6 +722,20 @@
WARNING: This option makes it possible to circumvent basic chip security functionality.
Because of this it SHOULD NEVER BE ENABLED IN PRODUCTION BUILDS.
+ config TEST_EVENT_TRIGGER_ENABLED
+ bool "Enable Test Event Trigger"
+ default y
+ help
+ Enable TestEventTrigger in GeneralDiagnostics cluster.
+
+ config TEST_EVENT_TRIGGER_ENABLE_KEY
+ string "Test Event Trigger Enable Key"
+ depends on TEST_EVENT_TRIGGER_ENABLED
+ default "00112233445566778899aabbccddeeff"
+ help
+ The EnableKey in hex string format used by TestEventTrigger command in GeneralDiagnostics
+ cluster. The length of the string should be 32.
+
config ENABLE_FIXED_TUNNEL_SERVER
bool "Use Fixed Tunnel Server"
default n
diff --git a/examples/platform/esp32/common/Esp32AppServer.cpp b/examples/platform/esp32/common/Esp32AppServer.cpp
index 2edd7b8..4484630 100644
--- a/examples/platform/esp32/common/Esp32AppServer.cpp
+++ b/examples/platform/esp32/common/Esp32AppServer.cpp
@@ -19,26 +19,86 @@
#include "Esp32AppServer.h"
#include "CHIPDeviceManager.h"
#include <app/clusters/network-commissioning/network-commissioning.h>
+#include <app/clusters/ota-requestor/OTATestEventTriggerDelegate.h>
#include <app/server/Dnssd.h>
#include <app/server/Server.h>
#include <platform/ESP32/NetworkCommissioningDriver.h>
+#include <string.h>
using namespace chip;
using namespace chip::Credentials;
using namespace chip::DeviceLayer;
+static constexpr char TAG[] = "ESP32Appserver";
+
namespace {
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
app::Clusters::NetworkCommissioning::Instance
sWiFiNetworkCommissioningInstance(0 /* Endpoint Id */, &(NetworkCommissioning::ESPWiFiDriver::GetInstance()));
#endif
+#if CONFIG_TEST_EVENT_TRIGGER_ENABLED
+static uint8_t sTestEventTriggerEnableKey[TestEventTriggerDelegate::kEnableKeyLength] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55,
+ 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
+ 0xcc, 0xdd, 0xee, 0xff };
+#endif
} // namespace
+#if CONFIG_TEST_EVENT_TRIGGER_ENABLED
+static int hex_digit_to_int(char hex)
+{
+ if ('A' <= hex && hex <= 'F')
+ {
+ return 10 + hex - 'A';
+ }
+ if ('a' <= hex && hex <= 'f')
+ {
+ return 10 + hex - 'a';
+ }
+ if ('0' <= hex && hex <= '9')
+ {
+ return hex - '0';
+ }
+ return -1;
+}
+
+static size_t hex_string_to_binary(const char * hex_string, uint8_t * buf, size_t buf_size)
+{
+ int num_char = strlen(hex_string);
+ if (num_char != buf_size * 2)
+ {
+ return 0;
+ }
+ for (size_t i = 0; i < num_char; i += 2)
+ {
+ int digit0 = hex_digit_to_int(hex_string[i]);
+ int digit1 = hex_digit_to_int(hex_string[i + 1]);
+
+ if (digit0 < 0 || digit1 < 0)
+ {
+ return 0;
+ }
+ buf[i / 2] = (digit0 << 4) + digit1;
+ }
+
+ return buf_size;
+}
+#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED
+
void Esp32AppServer::Init(AppDelegate * sAppDelegate)
{
// Init ZCL Data Model and CHIP App Server
static chip::CommonCaseDeviceServerInitParams initParams;
+#if CONFIG_TEST_EVENT_TRIGGER_ENABLED && CONFIG_ENABLE_OTA_REQUESTOR
+ if (hex_string_to_binary(CONFIG_TEST_EVENT_TRIGGER_ENABLE_KEY, sTestEventTriggerEnableKey,
+ sizeof(sTestEventTriggerEnableKey)) == 0)
+ {
+ ESP_LOGE(TAG, "Failed to convert the EnableKey string to octstr type value");
+ memset(sTestEventTriggerEnableKey, 0, sizeof(sTestEventTriggerEnableKey));
+ }
+ static OTATestEventTriggerDelegate testEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
+ initParams.testEventTriggerDelegate = &testEventTriggerDelegate;
+#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED
(void) initParams.InitializeStaticResourcesBeforeServerInit();
if (sAppDelegate != nullptr)
{
@@ -53,7 +113,7 @@
if (chip::DeviceLayer::ConnectivityMgr().IsThreadProvisioned() &&
(chip::Server::GetInstance().GetFabricTable().FabricCount() != 0))
{
- ESP_LOGI("ESP32AppServer", "Thread has been provisioned, publish the dns service now");
+ ESP_LOGI(TAG, "Thread has been provisioned, publish the dns service now");
chip::app::DnssdServer::Instance().StartServer();
}
#endif