#include #include #include #include #include #include #include #include #include #include #include #include #include uint32_t mock_now=0; #if defined(ESP32) #include int mock_reset_reason=ESP_RST_POWERON; #elif defined(RP2040_PLATFORM) bool mock_watchdog_enabled=false,mock_watchdog_any=false; #else namespace mesh { namespace power { volatile RecoveryRecord test_retained; ResetKind test_reset=ResetKind::Cold; volatile RecoveryRecord& platformRecoveryRecord() { return test_retained; } ResetKind platformResetKind() { return test_reset; } bool platformRecoverySupported() { return true; } unsigned configured_percent_calls=0; uint8_t configuredBatteryPercent(uint16_t mv) { ++configured_percent_calls; return mv<=3000 ? 0 : mv>=4200 ? 100 : uint8_t((mv-3000)*100/1200); } }} #endif #if !defined(NRF52_PLATFORM) #include #endif #if defined(NRF52_PLATFORM) // Compile the production writer implementation, including independent CRC32C // validation and the public-file verification after an attempted rename. #define ATOMIC_FILE_WRITER_IMPLEMENTATION #include #undef ATOMIC_FILE_WRITER_IMPLEMENTATION #endif #include using namespace mesh::power; static void retainedClear() { volatile uint8_t* p=reinterpret_cast(&platformRecoveryRecord()); for(size_t i=0;i