diff --git a/examples/platform/efr32/heap_4_silabs.c b/examples/platform/efr32/heap_4_silabs.c index 98680cbeb296f6..03dddf4322519d 100644 --- a/examples/platform/efr32/heap_4_silabs.c +++ b/examples/platform/efr32/heap_4_silabs.c @@ -442,6 +442,16 @@ size_t xPortGetMinimumEverFreeHeapSize(void) { return xMinimumEverFreeBytesRemaining; } + +void xPortResetHeapMinimumEverFreeHeapSize(void) +{ + taskENTER_CRITICAL(); + { + xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; + } + taskEXIT_CRITICAL(); +} + /*-----------------------------------------------------------*/ void vPortInitialiseBlocks(void) diff --git a/examples/platform/efr32/heap_4_silabs.h b/examples/platform/efr32/heap_4_silabs.h index 7873db896297c4..ed773f59f0a33c 100644 --- a/examples/platform/efr32/heap_4_silabs.h +++ b/examples/platform/efr32/heap_4_silabs.h @@ -42,6 +42,8 @@ extern "C" { void * pvPortCalloc(size_t num, size_t size); void * pvPortRealloc(void * pv, size_t size); +void xPortResetHeapMinimumEverFreeHeapSize(void); + #ifdef __cplusplus } #endif diff --git a/src/platform/EFR32/DiagnosticDataProviderImpl.cpp b/src/platform/EFR32/DiagnosticDataProviderImpl.cpp index 6ecfa321a13174..80430e238ef1a7 100644 --- a/src/platform/EFR32/DiagnosticDataProviderImpl.cpp +++ b/src/platform/EFR32/DiagnosticDataProviderImpl.cpp @@ -31,6 +31,7 @@ #include "AppConfig.h" #include "FreeRTOS.h" +#include "heap_4_silabs.h" using namespace ::chip::app::Clusters::GeneralDiagnostics; @@ -81,6 +82,16 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetCurrentHeapHighWatermark(uint64_t & cu return CHIP_NO_ERROR; } +CHIP_ERROR DiagnosticDataProviderImpl::ResetWatermarks() +{ + // If implemented, the server SHALL set the value of the CurrentHeapHighWatermark attribute to the + // value of the CurrentHeapUsed. + + xPortResetHeapMinimumEverFreeHeapSize(); + + return CHIP_NO_ERROR; +} + // General Diagnostics Getters CHIP_ERROR DiagnosticDataProviderImpl::GetRebootCount(uint16_t & rebootCount) diff --git a/src/platform/EFR32/DiagnosticDataProviderImpl.h b/src/platform/EFR32/DiagnosticDataProviderImpl.h index a10259e6f7b336..600b170fc295de 100644 --- a/src/platform/EFR32/DiagnosticDataProviderImpl.h +++ b/src/platform/EFR32/DiagnosticDataProviderImpl.h @@ -42,6 +42,7 @@ class DiagnosticDataProviderImpl : public DiagnosticDataProvider CHIP_ERROR GetCurrentHeapFree(uint64_t & currentHeapFree) override; CHIP_ERROR GetCurrentHeapUsed(uint64_t & currentHeapUsed) override; CHIP_ERROR GetCurrentHeapHighWatermark(uint64_t & currentHeapHighWatermark) override; + CHIP_ERROR ResetWatermarks() override; CHIP_ERROR GetRebootCount(uint16_t & rebootCount) override; CHIP_ERROR GetBootReason(BootReasonType & bootReason) override; CHIP_ERROR GetUpTime(uint64_t & upTime) override;