idfxx 1.0.0
Modern C++23 components for ESP-IDF
Loading...
Searching...
No Matches
system.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Chris Leishman
3
4#pragma once
5
19#include <idfxx/error>
20
21#include <cstddef>
22#include <esp_system.h>
23#include <string>
24
25namespace idfxx {
26
38enum class reset_reason : int {
39 // clang-format off
40 unknown = 0,
41 power_on = 1,
42 external = 2,
43 software = 3,
44 panic = 4,
46 task_watchdog = 6,
47 watchdog = 7,
48 deep_sleep = 8,
49 brownout = 9,
50 sdio = 10,
51 usb = 11,
52 jtag = 12,
53 efuse = 13,
54 power_glitch = 14,
55 cpu_lockup = 15,
56 // clang-format on
57};
58
66
73 return static_cast<reset_reason>(esp_reset_reason());
74}
75
82[[noreturn]] inline void restart() {
84}
85
86// =============================================================================
87// Shutdown handlers
88// =============================================================================
89
90#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
102void register_shutdown_handler(void (*handler)());
103
112void unregister_shutdown_handler(void (*handler)());
113#endif
114
127
137
138// =============================================================================
139// Heap information
140// =============================================================================
141
147[[nodiscard]] inline std::size_t free_heap_size() noexcept {
148 return esp_get_free_heap_size();
149}
150
161}
162
171[[nodiscard]] inline std::size_t minimum_free_heap_size() noexcept {
173}
174
// end of idfxx_core_system // end of idfxx_core
177
178} // namespace idfxx
179
180#include "sdkconfig.h"
181#ifdef CONFIG_IDFXX_STD_FORMAT
183#include <algorithm>
184#include <format>
185namespace std {
186template<>
187struct formatter<idfxx::reset_reason> {
188 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
189
190 template<typename FormatContext>
191 auto format(idfxx::reset_reason r, FormatContext& ctx) const {
192 auto s = to_string(r);
193 return std::copy(s.begin(), s.end(), ctx.out());
194 }
195};
196} // namespace std
198#endif // CONFIG_IDFXX_STD_FORMAT
void unregister_shutdown_handler(void(*handler)())
Unregisters a previously registered shutdown handler.
reset_reason last_reset_reason() noexcept
Returns the reason for the most recent chip reset.
Definition system.hpp:72
std::size_t free_heap_size() noexcept
Returns the current free heap size in bytes.
Definition system.hpp:147
reset_reason
Reason for the most recent chip reset.
Definition system.hpp:38
std::size_t minimum_free_heap_size() noexcept
Returns the minimum free heap size recorded since boot.
Definition system.hpp:171
std::size_t free_internal_heap_size() noexcept
Returns the current free internal heap size in bytes.
Definition system.hpp:159
void restart()
Restart the chip immediately.
Definition system.hpp:82
result< void > try_unregister_shutdown_handler(void(*handler)())
Unregisters a previously registered shutdown handler.
void register_shutdown_handler(void(*handler)())
Registers a function to be called during chip shutdown/restart.
result< void > try_register_shutdown_handler(void(*handler)())
Registers a function to be called during chip shutdown/restart.
@ power_glitch
Reset due to power glitch detected.
@ power_on
Power-on reset.
@ sdio
Reset over SDIO.
@ usb
Reset by USB peripheral.
@ efuse
Reset due to efuse error.
@ external
Reset by external pin (not applicable for ESP32).
@ interrupt_watchdog
Reset due to interrupt watchdog.
@ watchdog
Reset due to other watchdog.
@ brownout
Brownout reset (software or hardware).
@ cpu_lockup
Reset due to CPU lock up.
@ task_watchdog
Reset due to task watchdog.
@ unknown
Reset reason could not be determined.
@ jtag
Reset by JTAG.
@ panic
Software reset due to exception/panic.
@ deep_sleep
Reset after exiting deep sleep mode.
@ software
Software reset via esp_restart.
std::string to_string(core_id c)
Returns a string representation of a CPU core identifier.
Definition cpu.hpp:52
std::expected< T, std::error_code > result
result type wrapping a value or error code.
Definition error.hpp:120