Skip to content

Commit

Permalink
[ESP32] Add Kconfig Option for TestEventTrigger (#22809)
Browse files Browse the repository at this point in the history
* ESP32: Add Kconfig Option for TestEventTrigger Command

* fix compile error of bridge example

Co-authored-by: Andrei Litvin <[email protected]>
  • Loading branch information
2 people authored and pull[bot] committed Nov 27, 2023
1 parent 19b43c4 commit 2304459
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 1 deletion.
14 changes: 14 additions & 0 deletions config/esp32/components/chip/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,20 @@ menu "CHIP Device Layer"
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
Expand Down
62 changes: 61 additions & 1 deletion examples/platform/esp32/common/Esp32AppServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -53,7 +113,7 @@ void Esp32AppServer::Init(AppDelegate * sAppDelegate)
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
Expand Down

0 comments on commit 2304459

Please sign in to comment.