From 0512e285a72e3c6001ccbaf5242a4f5a7208f75d Mon Sep 17 00:00:00 2001 From: James Harrow Date: Thu, 12 Sep 2024 21:47:17 +0100 Subject: [PATCH 1/7] Fix BUILD.gn which was broken in moving files around in energy management app. --- .../energy-management-app/silabs/BUILD.gn | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/examples/energy-management-app/silabs/BUILD.gn b/examples/energy-management-app/silabs/BUILD.gn index b51ed59de6f52c..76e603aba3736c 100644 --- a/examples/energy-management-app/silabs/BUILD.gn +++ b/examples/energy-management-app/silabs/BUILD.gn @@ -101,7 +101,11 @@ if (wifi_soc) { "${examples_plat_dir}", "${chip_root}/src/lib", "${examples_common_plat_dir}", - "../energy-management-common/include", + "${chip_root}/examples/energy-management-app/energy-management-common/common/include", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/include", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/include", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/include", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/include", ] if (use_wf200) { @@ -136,23 +140,29 @@ silabs_executable("energy-management-app") { } sources = [ - "${chip_root}/examples/energy-management-app/energy-management-common/src/ChargingTargetsMemMgr.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DEMTestEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementDelegateImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementManager.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/ElectricalPowerMeasurementDelegate.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseDelegateImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseMain.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseManager.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseTargetsStore.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyReportingEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyTimeUtils.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/FakeReadings.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/PowerTopologyDelegate.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/device-energy-management-mode.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/energy-evse-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/common/src/EnergyTimeUtils.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DEMTestEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DeviceEnergyManagementDelegateImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DeviceEnergyManagementManager.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/device-energy-management-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/ChargingTargetsMemMgr.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EVSEManufacturerImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseDelegateImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseMain.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseManager.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseTargetsStore.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/energy-evse-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/ElectricalPowerMeasurementDelegate.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/EnergyReportingEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/FakeReadings.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/PowerTopologyDelegate.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/WaterHeaterMain.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/WhmDelegateImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/WhmInstance.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/WhmMain.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/WhmManufacturer.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/water-heater/src/water-heater-mode.cpp", "${examples_common_plat_dir}/main.cpp", "src/AppTask.cpp", ] From 78d6af8bb3b93f223678cbf853cab7737f25377c Mon Sep 17 00:00:00 2001 From: James Harrow Date: Thu, 12 Sep 2024 23:59:55 +0100 Subject: [PATCH 2/7] Added BUILD.gn arguments to enable different feature support. Updated README. Added test event triggers. --- .../energy-management-app/silabs/BUILD.gn | 27 +++++ .../energy-management-app/silabs/README.md | 26 ++++- .../silabs/include/AppTask.h | 4 +- .../silabs/src/AppTask.cpp | 106 ++++++++++++++++-- .../platform/esp32/common/Esp32AppServer.cpp | 2 +- 5 files changed, 150 insertions(+), 15 deletions(-) diff --git a/examples/energy-management-app/silabs/BUILD.gn b/examples/energy-management-app/silabs/BUILD.gn index 76e603aba3736c..0387bbaf91cc42 100644 --- a/examples/energy-management-app/silabs/BUILD.gn +++ b/examples/energy-management-app/silabs/BUILD.gn @@ -47,6 +47,22 @@ import("${examples_common_plat_dir}/args.gni") declare_args() { # Dump memory usage at link time. chip_print_memory_usage = false + + # Enable test event triggers by default: Disable these in production devices + chip_enable_energy_evse_trigger = true + chip_enable_energy_reporting_trigger = true + chip_enable_water_heater_management_trigger = true + chip_enable_device_energy_management_trigger = true + + # Device Energy Management feature support - only one of these can be true + # or both can be disabled if forecasting is not supported + chip_dem_support_power_forecast_reporting = true + chip_dem_support_state_forecast_reporting = false + + # Only one of these examples should be enabled + chip_enable_example_evse_device = true + chip_enable_example_water_heater_device = false + } if (slc_generate) { @@ -135,6 +151,17 @@ silabs_executable("energy-management-app") { include_dirs = [ "include" ] defines = [] + defines += [ + "CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER=${chip_enable_energy_evse_trigger}", + "CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER=${chip_enable_energy_reporting_trigger}", + "CHIP_DEVICE_CONFIG_ENABLE_WATER_HEATER_MANAGEMENT_TRIGGER=${chip_enable_water_heater_management_trigger}", + "CHIP_DEVICE_CONFIG_ENABLE_DEVICE_ENERGY_MANAGEMENT_TRIGGER=${chip_enable_device_energy_management_trigger}", + "CHIP_DEVICE_CONFIG_DEM_SUPPORT_POWER_FORECAST_REPORTING=${chip_dem_support_power_forecast_reporting}", + "CHIP_DEVICE_CONFIG_DEM_SUPPORT_STATE_FORECAST_REPORTING=${chip_dem_support_state_forecast_reporting}", + "CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE=${chip_enable_example_evse_device}", + "CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE=${chip_enable_example_water_heater_device}", + ] + if (silabs_board == "BRD2704A") { defines += [ "SL_STATUS_LED=0" ] } diff --git a/examples/energy-management-app/silabs/README.md b/examples/energy-management-app/silabs/README.md index 06fc6f5c46b176..96237911df0989 100644 --- a/examples/energy-management-app/silabs/README.md +++ b/examples/energy-management-app/silabs/README.md @@ -33,8 +33,8 @@ An example showing the use of CHIP on the Silicon Labs EFR32 MG12 and MG24. ## Introduction The EFR32 Energy Management example provides a baseline demonstration of a EVSE -device, built using Matter and the Silicon Labs gecko SDK. It can be controlled -by a Chip controller over an Openthread or Wifi network.. +or Water Heater device, built using Matter and the Silicon Labs gecko SDK. It +can be controlled by a Chip controller over an Openthread or Wifi network. The EFR32 device can be commissioned over Bluetooth Low Energy where the device and the Chip controller will exchange security information with the Rendez-vous @@ -45,9 +45,9 @@ If the LCD is enabled, the LCD on the Silabs WSTK shows a QR Code containing the needed commissioning information for the BLE connection and starting the Rendez-vous procedure. -The EVSE example is intended to serve both as a means to explore the workings of -Matter as well as a template for creating real products based on the Silicon -Labs platform. +The EVSE and Water Heater examples are intended to serve both as a means to +explore the workings of Matter Energy Management as well as a template for +creating real products based on the Silicon Labs platform. ## Building @@ -99,9 +99,25 @@ Labs platform. $ git submodule update --init $ source third_party/connectedhomeip/scripts/activate.sh $ export SILABS_BOARD=BRD4187C + + To build the EVSE example + $ gn gen out/debug $ ninja -C out/debug + To build the Water Heater example you can change the args to gn gen (see + BUILD.gn for arg options) + + $ gn gen out/debug --args='chip_enable_example_evse_device=false chip_enable_example_water_heater_device=true' + $ ninja -C out/debug + + To change Device Energy Management feature support (e.g. Power forecast or + State forecast reporting), you can change the args to gn gen (see BUILD.gn + for arg options) + + $ gn gen out/debug --args='chip_dem_support_state_forecast_reporting=true chip_dem_support_power_forecast_reporting=false' + $ ninja -C out/debug + - To delete generated executable, libraries and object files use: $ cd ~/connectedhomeip/examples/energy-management-app/silabs diff --git a/examples/energy-management-app/silabs/include/AppTask.h b/examples/energy-management-app/silabs/include/AppTask.h index 99114610948952..b7105da42878db 100644 --- a/examples/energy-management-app/silabs/include/AppTask.h +++ b/examples/energy-management-app/silabs/include/AppTask.h @@ -28,7 +28,7 @@ #include "AppEvent.h" #include "BaseApplication.h" -#include "EnergyEvseManager.h" + #include "FreeRTOS.h" #include "timers.h" // provides FreeRTOS timer support #include @@ -80,7 +80,7 @@ class AppTask : public BaseApplication private: static AppTask sAppTask; - static void EvseActionEventHandler(AppEvent * aEvent); + static void EnergyManagementActionEventHandler(AppEvent * aEvent); static void UpdateClusterState(intptr_t context); diff --git a/examples/energy-management-app/silabs/src/AppTask.cpp b/examples/energy-management-app/silabs/src/AppTask.cpp index 4ed73efb28711e..9b1a93e00949d1 100644 --- a/examples/energy-management-app/silabs/src/AppTask.cpp +++ b/examples/energy-management-app/silabs/src/AppTask.cpp @@ -21,7 +21,12 @@ #include "AppConfig.h" #include "AppEvent.h" #include "LEDWidget.h" +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE #include +#endif +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE +#include +#endif #include #include #include @@ -43,6 +48,19 @@ #include +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER +#include +#endif +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER +#include +#endif +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_WATER_HEATER_MANAGEMENT_TRIGGER +#include +#endif +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_DEVICE_ENERGY_MANAGEMENT_TRIGGER +#include +#endif + #if (defined(SL_CATALOG_SIMPLE_LED_LED1_PRESENT) || defined(SIWX_917)) #define EVSE_LED 1 #else @@ -53,7 +71,7 @@ #define APP_EVSE_SWITCH 1 namespace { -LEDWidget sEvseLED; +LEDWidget sEnergyManagementLED; } using namespace chip; @@ -61,6 +79,7 @@ using namespace chip::app; using namespace chip::app::Clusters; using namespace chip::app::Clusters::DeviceEnergyManagement; using namespace chip::app::Clusters::DeviceEnergyManagement::Attributes; +using namespace chip::app::Clusters::WaterHeaterManagement; using namespace ::chip::DeviceLayer; using namespace ::chip::DeviceLayer::Silabs; using namespace ::chip::DeviceLayer::Internal; @@ -72,9 +91,21 @@ namespace Clusters { namespace DeviceEnergyManagement { // Keep track of the parsed featureMap option +#if (CHIP_DEVICE_CONFIG_DEM_SUPPORT_POWER_FORECAST_REPORTING) && (CHIP_DEVICE_CONFIG_DEM_SUPPORT_STATE_FORECAST_REPORTING) +#error Cannot define CHIP_DEVICE_CONFIG_DEM_SUPPORT_POWER_FORECAST_REPORTING and CHIP_DEVICE_CONFIG_DEM_SUPPORT_STATE_FORECAST_REPORTING +#endif + +#if CHIP_DEVICE_CONFIG_DEM_SUPPORT_POWER_FORECAST_REPORTING static chip::BitMask sFeatureMap(Feature::kPowerAdjustment, Feature::kPowerForecastReporting, - Feature::kStateForecastReporting, Feature::kStartTimeAdjustment, Feature::kPausable, - Feature::kForecastAdjustment, Feature::kConstraintBasedAdjustment); + Feature::kStartTimeAdjustment, Feature::kPausable, Feature::kForecastAdjustment, + Feature::kConstraintBasedAdjustment); +#elif CHIP_DEVICE_CONFIG_DEM_SUPPORT_STATE_FORECAST_REPORTING +static chip::BitMask sFeatureMap(Feature::kPowerAdjustment, Feature::kStateForecastReporting, + Feature::kStartTimeAdjustment, Feature::kPausable, Feature::kForecastAdjustment, + Feature::kConstraintBasedAdjustment); +#else +static chip::BitMask sFeatureMap(Feature::kPowerAdjustment); +#endif chip::BitMask GetFeatureMapFromCmdLine() { @@ -91,14 +122,33 @@ AppTask AppTask::sAppTask; void ApplicationInit() { chip::DeviceLayer::PlatformMgr().LockChipStack(); + SILABS_LOG("=================================================="); +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE + SILABS_LOG("energy-management-example EVSE starting. featureMap 0x%08lx", DeviceEnergyManagement::sFeatureMap.Raw()); + EvseApplicationInit(); - sEvseLED.Init(EVSE_LED); +#endif // CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE + +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE + SILABS_LOG("energy-management-example WaterHeater starting. featureMap 0x%08lx", DeviceEnergyManagement::sFeatureMap.Raw()); + + FullWhmApplicationInit(); +#endif // CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE + SILABS_LOG("=================================================="); + + sEnergyManagementLED.Init(EVSE_LED); chip::DeviceLayer::PlatformMgr().UnlockChipStack(); } void ApplicationShutdown() { chip::DeviceLayer::PlatformMgr().LockChipStack(); +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE EvseApplicationShutdown(); +#endif // CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE + +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE + FullWhmApplicationShutdown(); +#endif // CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE chip::DeviceLayer::PlatformMgr().UnlockChipStack(); } @@ -108,7 +158,11 @@ CHIP_ERROR AppTask::Init() chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(AppTask::ButtonEventHandler); #ifdef DISPLAY_ENABLED - GetLCD().Init((uint8_t *) "energy-management-App"); +#if CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_EVSE_DEVICE + GetLCD().Init((uint8_t *) "energy-management-App (EVSE)"); +#elif CHIP_DEVICE_CONFIG_ENABLE_EXAMPLE_WATER_HEATER_DEVICE + GetLCD().Init((uint8_t *) "energy-management-App (WaterHeater)"); +#endif #endif err = BaseApplication::Init(); @@ -120,6 +174,44 @@ CHIP_ERROR AppTask::Init() ApplicationInit(); +#if (CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER) || (CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER) || \ + (CONFIG_CHIP_DEVICE_CONFIG_ENABLE_WATER_HEATER_MANAGEMENT_TRIGGER) || \ + (CONFIG_CHIP_DEVICE_CONFIG_ENABLE_DEVICE_ENERGY_MANAGEMENT_TRIGGER) + TestEventTriggerDelegate * pTestEventDelegate = Server::GetInstance().GetTestEventTriggerDelegate(); +#endif + +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_EVSE_TRIGGER + static EnergyEvseTestEventTriggerHandler sEnergyEvseTestEventTriggerHandler; + if (pTestEventDelegate != nullptr) + { + VerifyOrDie(pTestEventDelegate->AddHandler(&sEnergyEvseTestEventTriggerHandler) == CHIP_NO_ERROR); + } +#endif + +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_ENERGY_REPORTING_TRIGGER + static EnergyReportingTestEventTriggerHandler sEnergyReportingTestEventTriggerHandler; + if (pTestEventDelegate != nullptr) + { + VerifyOrDie(pTestEventDelegate->AddHandler(&sEnergyReportingTestEventTriggerHandler) == CHIP_NO_ERROR); + } + +#endif +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_WATER_HEATER_MANAGEMENT_TRIGGER + static WaterHeaterManagementTestEventTriggerHandler sWaterHeaterManagementTestEventTriggerHandler; + + if (pTestEventDelegate != nullptr) + { + VerifyOrDie(pTestEventDelegate->AddHandler(&sWaterHeaterManagementTestEventTriggerHandler) == CHIP_NO_ERROR); + } +#endif +#if CONFIG_CHIP_DEVICE_CONFIG_ENABLE_DEVICE_ENERGY_MANAGEMENT_TRIGGER + static DeviceEnergyManagementTestEventTriggerHandler sDeviceEnergyManagementTestEventTriggerHandler; + if (pTestEventDelegate != nullptr) + { + VerifyOrDie(pTestEventDelegate->AddHandler(&sDeviceEnergyManagementTestEventTriggerHandler) == CHIP_NO_ERROR); + } +#endif + // Update the LCD with the Stored value. Show QR Code if not provisioned #ifdef DISPLAY_ENABLED GetLCD().WriteDemoUI(LightMgr().IsLightOn()); @@ -168,7 +260,7 @@ void AppTask::AppTaskMain(void * pvParameter) } } -void AppTask::EvseActionEventHandler(AppEvent * aEvent) +void AppTask::EnergyManagementActionEventHandler(AppEvent * aEvent) { bool initiated = false; int32_t actor; @@ -201,7 +293,7 @@ void AppTask::ButtonEventHandler(uint8_t button, uint8_t btnAction) if (button == APP_EVSE_SWITCH && btnAction == static_cast(SilabsPlatform::ButtonAction::ButtonPressed)) { - button_event.Handler = EvseActionEventHandler; + button_event.Handler = EnergyManagementActionEventHandler; AppTask::GetAppTask().PostEvent(&button_event); } else if (button == APP_FUNCTION_BUTTON) diff --git a/examples/platform/esp32/common/Esp32AppServer.cpp b/examples/platform/esp32/common/Esp32AppServer.cpp index 37dd7f4fe4adcf..e5b58e451e45e5 100644 --- a/examples/platform/esp32/common/Esp32AppServer.cpp +++ b/examples/platform/esp32/common/Esp32AppServer.cpp @@ -22,7 +22,7 @@ #include #include #include -#include + #include #include #include From f7cb5a95e9ede24ec25352688c853c357d5d3405 Mon Sep 17 00:00:00 2001 From: James Harrow Date: Mon, 16 Sep 2024 16:45:52 +0100 Subject: [PATCH 3/7] Removed blank lines --- examples/energy-management-app/silabs/BUILD.gn | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/energy-management-app/silabs/BUILD.gn b/examples/energy-management-app/silabs/BUILD.gn index 0387bbaf91cc42..5ddab3b6a8a7ea 100644 --- a/examples/energy-management-app/silabs/BUILD.gn +++ b/examples/energy-management-app/silabs/BUILD.gn @@ -47,22 +47,18 @@ import("${examples_common_plat_dir}/args.gni") declare_args() { # Dump memory usage at link time. chip_print_memory_usage = false - # Enable test event triggers by default: Disable these in production devices chip_enable_energy_evse_trigger = true chip_enable_energy_reporting_trigger = true chip_enable_water_heater_management_trigger = true chip_enable_device_energy_management_trigger = true - # Device Energy Management feature support - only one of these can be true # or both can be disabled if forecasting is not supported chip_dem_support_power_forecast_reporting = true chip_dem_support_state_forecast_reporting = false - # Only one of these examples should be enabled chip_enable_example_evse_device = true chip_enable_example_water_heater_device = false - } if (slc_generate) { From 86b729126d6a10fe0e9f405adcd6122099a144fa Mon Sep 17 00:00:00 2001 From: lpbeliveau-silabs Date: Fri, 9 Aug 2024 18:11:30 -0400 Subject: [PATCH 4/7] Added test event triggers --- .../silabs/build_for_wifi_args.gni | 1 + .../silabs/openthread.gni | 1 + .../silabs/src/AppTask.cpp | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/examples/energy-management-app/silabs/build_for_wifi_args.gni b/examples/energy-management-app/silabs/build_for_wifi_args.gni index bfded904a34176..1b1c0ecd6a7c78 100644 --- a/examples/energy-management-app/silabs/build_for_wifi_args.gni +++ b/examples/energy-management-app/silabs/build_for_wifi_args.gni @@ -18,6 +18,7 @@ silabs_sdk_target = get_label_info(":sdk", "label_no_toolchain") chip_enable_openthread = false import("${chip_root}/src/platform/silabs/wifi_args.gni") +sl_enable_test_event_trigger = true chip_enable_ota_requestor = false disable_lcd = true app_data_model = diff --git a/examples/energy-management-app/silabs/openthread.gni b/examples/energy-management-app/silabs/openthread.gni index 2813a5a1fb0bda..b45952e0c5f24b 100644 --- a/examples/energy-management-app/silabs/openthread.gni +++ b/examples/energy-management-app/silabs/openthread.gni @@ -23,6 +23,7 @@ app_data_model = chip_enable_ota_requestor = false chip_enable_openthread = true disable_lcd = true +sl_enable_test_event_trigger = true openthread_external_platform = "${chip_root}/third_party/openthread/platforms/efr32:libopenthread-efr32" diff --git a/examples/energy-management-app/silabs/src/AppTask.cpp b/examples/energy-management-app/silabs/src/AppTask.cpp index 4ed73efb28711e..8b8aa7cb9e61e6 100644 --- a/examples/energy-management-app/silabs/src/AppTask.cpp +++ b/examples/energy-management-app/silabs/src/AppTask.cpp @@ -43,6 +43,13 @@ #include +#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED +#include +#include +#include +#include +#endif + #if (defined(SL_CATALOG_SIMPLE_LED_LED1_PRESENT) || defined(SIWX_917)) #define EVSE_LED 1 #else @@ -66,6 +73,12 @@ using namespace ::chip::DeviceLayer::Silabs; using namespace ::chip::DeviceLayer::Internal; using namespace chip::TLV; +#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED +static EnergyEvseTestEventTriggerHandler sEnergyEvseTestEventTriggerHandler; +static EnergyReportingTestEventTriggerHandler sEnergyReportingTestEventTriggerHandler; +static DeviceEnergyManagementTestEventTriggerHandler sDeviceEnergyManagementTestEventTriggerHandler; +#endif + namespace chip { namespace app { namespace Clusters { @@ -120,6 +133,15 @@ CHIP_ERROR AppTask::Init() ApplicationInit(); +#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED + if (Server::GetInstance().GetTestEventTriggerDelegate() != nullptr) + { + Server::GetInstance().GetTestEventTriggerDelegate()->AddHandler(&sEnergyEvseTestEventTriggerHandler); + Server::GetInstance().GetTestEventTriggerDelegate()->AddHandler(&sEnergyReportingTestEventTriggerHandler); + Server::GetInstance().GetTestEventTriggerDelegate()->AddHandler(&sDeviceEnergyManagementTestEventTriggerHandler); + } +#endif + // Update the LCD with the Stored value. Show QR Code if not provisioned #ifdef DISPLAY_ENABLED GetLCD().WriteDemoUI(LightMgr().IsLightOn()); From 1f3b31e04085fe95daa9a1dc7bf7945283ee759b Mon Sep 17 00:00:00 2001 From: Faisal Bhaiyat Date: Fri, 2 Aug 2024 12:58:23 +0100 Subject: [PATCH 5/7] [Silabs] Fix silabs energy mangement app --- .../energy-management-app/silabs/BUILD.gn | 39 ++++++++++--------- .../silabs/src/AppTask.cpp | 6 +-- examples/platform/silabs/provision/BUILD.gn | 5 +++ 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/examples/energy-management-app/silabs/BUILD.gn b/examples/energy-management-app/silabs/BUILD.gn index b51ed59de6f52c..d32356994e60a4 100644 --- a/examples/energy-management-app/silabs/BUILD.gn +++ b/examples/energy-management-app/silabs/BUILD.gn @@ -101,7 +101,10 @@ if (wifi_soc) { "${examples_plat_dir}", "${chip_root}/src/lib", "${examples_common_plat_dir}", - "../energy-management-common/include", + "${chip_root}/examples/energy-management-app/energy-management-common/common/include", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/include", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/include", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/include", ] if (use_wf200) { @@ -136,23 +139,23 @@ silabs_executable("energy-management-app") { } sources = [ - "${chip_root}/examples/energy-management-app/energy-management-common/src/ChargingTargetsMemMgr.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DEMTestEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementDelegateImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementManager.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EVSEManufacturerImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/ElectricalPowerMeasurementDelegate.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseDelegateImpl.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseMain.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseManager.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyEvseTargetsStore.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyReportingEventTriggers.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/EnergyTimeUtils.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/FakeReadings.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/PowerTopologyDelegate.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/device-energy-management-mode.cpp", - "${chip_root}/examples/energy-management-app/energy-management-common/src/energy-evse-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/common/src/EnergyTimeUtils.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DEMTestEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DeviceEnergyManagementDelegateImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/DeviceEnergyManagementManager.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/device-energy-management/src/device-energy-management-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/ChargingTargetsMemMgr.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EVSEManufacturerImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseDelegateImpl.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseMain.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseManager.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/EnergyEvseTargetsStore.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-evse/src/energy-evse-mode.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/ElectricalPowerMeasurementDelegate.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/EnergyReportingEventTriggers.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/FakeReadings.cpp", + "${chip_root}/examples/energy-management-app/energy-management-common/energy-reporting/src/PowerTopologyDelegate.cpp", "${examples_common_plat_dir}/main.cpp", "src/AppTask.cpp", ] diff --git a/examples/energy-management-app/silabs/src/AppTask.cpp b/examples/energy-management-app/silabs/src/AppTask.cpp index 8b8aa7cb9e61e6..8d3454e8c46218 100644 --- a/examples/energy-management-app/silabs/src/AppTask.cpp +++ b/examples/energy-management-app/silabs/src/AppTask.cpp @@ -43,7 +43,7 @@ #include -#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED +#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLED #include #include #include @@ -73,7 +73,7 @@ using namespace ::chip::DeviceLayer::Silabs; using namespace ::chip::DeviceLayer::Internal; using namespace chip::TLV; -#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED +#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLED static EnergyEvseTestEventTriggerHandler sEnergyEvseTestEventTriggerHandler; static EnergyReportingTestEventTriggerHandler sEnergyReportingTestEventTriggerHandler; static DeviceEnergyManagementTestEventTriggerHandler sDeviceEnergyManagementTestEventTriggerHandler; @@ -133,7 +133,7 @@ CHIP_ERROR AppTask::Init() ApplicationInit(); -#if SL_MATTER_TEST_EVENT_TRIGGER_ENABLED +#ifdef SL_MATTER_TEST_EVENT_TRIGGER_ENABLED if (Server::GetInstance().GetTestEventTriggerDelegate() != nullptr) { Server::GetInstance().GetTestEventTriggerDelegate()->AddHandler(&sEnergyEvseTestEventTriggerHandler); diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn index ccd5b919bc0379..e0c311416e8587 100644 --- a/examples/platform/silabs/provision/BUILD.gn +++ b/examples/platform/silabs/provision/BUILD.gn @@ -47,6 +47,11 @@ source_set("storage") { } deps = [ "${chip_root}/src/lib" ] + public_deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ] + + public_configs = [ + "${chip_root}/examples/platform/silabs/efr32:test-event-trigger-config", + ] } From 2f172241ee4637d0b08679393d8bf04f39179aae Mon Sep 17 00:00:00 2001 From: Mathieu Kardous Date: Thu, 19 Sep 2024 10:45:39 -0400 Subject: [PATCH 6/7] Fix gn conditional inclusions --- examples/platform/silabs/SiWx917/BUILD.gn | 3 --- examples/platform/silabs/efr32/BUILD.gn | 3 --- examples/platform/silabs/provision/BUILD.gn | 8 +++++--- third_party/silabs/efr32_sdk.gni | 3 +++ 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/examples/platform/silabs/SiWx917/BUILD.gn b/examples/platform/silabs/SiWx917/BUILD.gn index 6ead7f31154b09..156fb38e4916fc 100644 --- a/examples/platform/silabs/SiWx917/BUILD.gn +++ b/examples/platform/silabs/SiWx917/BUILD.gn @@ -40,9 +40,6 @@ declare_args() { #default Wifi Password chip_default_wifi_psk = "" - # Enable TestEventTrigger in GeneralDiagnostics cluster - sl_enable_test_event_trigger = false - # The EnableKey in hex string format used by TestEventTrigger command in # GeneralDiagnostics cluster. The length of the string should be 16 bytes. sl_test_event_trigger_enable_key = "00112233445566778899AABBCCDDEEFF" diff --git a/examples/platform/silabs/efr32/BUILD.gn b/examples/platform/silabs/efr32/BUILD.gn index 3691091a0bc3c7..91cd2c1a0a58d6 100644 --- a/examples/platform/silabs/efr32/BUILD.gn +++ b/examples/platform/silabs/efr32/BUILD.gn @@ -40,9 +40,6 @@ declare_args() { #default Wifi Password chip_default_wifi_psk = "" - # Enable TestEventTrigger in GeneralDiagnostics cluster - sl_enable_test_event_trigger = false - # The EnableKey in hex string format used by TestEventTrigger command in # GeneralDiagnostics cluster. The length of the string should be 16 bytes. sl_test_event_trigger_enable_key = "00112233445566778899AABBCCDDEEFF" diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn index e0c311416e8587..72bdf3738a31ae 100644 --- a/examples/platform/silabs/provision/BUILD.gn +++ b/examples/platform/silabs/provision/BUILD.gn @@ -51,7 +51,9 @@ source_set("storage") { public_deps = [ "${chip_root}/src/platform/silabs/provision:provision-headers" ] - public_configs = [ - "${chip_root}/examples/platform/silabs/efr32:test-event-trigger-config", - ] + if (sl_enable_test_event_trigger) { + public_configs = [ + "${chip_root}/examples/platform/silabs/efr32:test-event-trigger-config", + ] + } } diff --git a/third_party/silabs/efr32_sdk.gni b/third_party/silabs/efr32_sdk.gni index 3f30a0ca52f867..1d4472a8bd7cfd 100644 --- a/third_party/silabs/efr32_sdk.gni +++ b/third_party/silabs/efr32_sdk.gni @@ -86,6 +86,9 @@ declare_args() { # Factory Provision storage use_provision_flash_storage = wifi_soc + + # Enable TestEventTrigger in GeneralDiagnostics cluster + sl_enable_test_event_trigger = false } examples_plat_dir = "${chip_root}/examples/platform/silabs/efr32" From caa42db2f0ff4a8a12239446e48521cdbfa70137 Mon Sep 17 00:00:00 2001 From: Mathieu Kardous Date: Fri, 20 Sep 2024 08:27:42 -0400 Subject: [PATCH 7/7] Fix GN conflict --- examples/platform/silabs/provision/BUILD.gn | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/platform/silabs/provision/BUILD.gn b/examples/platform/silabs/provision/BUILD.gn index 72bdf3738a31ae..f9e056f5ffa8a2 100644 --- a/examples/platform/silabs/provision/BUILD.gn +++ b/examples/platform/silabs/provision/BUILD.gn @@ -52,8 +52,13 @@ source_set("storage") { [ "${chip_root}/src/platform/silabs/provision:provision-headers" ] if (sl_enable_test_event_trigger) { - public_configs = [ - "${chip_root}/examples/platform/silabs/efr32:test-event-trigger-config", - ] + # Temporary workaround since we have duplicated configurations + if (wifi_soc) { + public_configs = [ "${chip_root}/examples/platform/silabs/SiWx917:test-event-trigger-config" ] + } else { + public_configs = [ + "${chip_root}/examples/platform/silabs/efr32:test-event-trigger-config", + ] + } } }