mirror of
https://github.com/esp-rs/esp-idf-hal.git
synced 2025-09-28 04:41:02 +00:00
* Fixes #443: Add new ResetReason enum items * Fix examples/reset_reason.rs comments * Add forgotten 5.1.3 version to conditions * Add forgotten 5.1.3 version to more conditions
This commit is contained in:
parent
d849cac7f9
commit
74ffea5c0c
25
examples/reset_reason.rs
Normal file
25
examples/reset_reason.rs
Normal file
@ -0,0 +1,25 @@
|
||||
//! This example demonstrates a how to ask for the reset reason and the wakeup reason.
|
||||
use std::{thread, time};
|
||||
|
||||
use esp_idf_sys::{self as _}; // If using the `binstart` feature of `esp-idf-sys`, always keep this module imported
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
esp_idf_sys::link_patches();
|
||||
|
||||
let wakeup_reason = esp_idf_hal::reset::WakeupReason::get();
|
||||
println!("Wakeup reason: {:?}", wakeup_reason);
|
||||
|
||||
let reset_reason = esp_idf_hal::reset::ResetReason::get();
|
||||
println!("Reset reason: {:?}", reset_reason);
|
||||
|
||||
thread::sleep(time::Duration::from_millis(1000));
|
||||
|
||||
let sleep_micros = 2_000_000;
|
||||
unsafe {
|
||||
esp_idf_sys::esp_sleep_enable_timer_wakeup(sleep_micros);
|
||||
|
||||
println!("Going to deep sleep {} seconds", sleep_micros / 1_000_000);
|
||||
esp_idf_sys::esp_deep_sleep_start();
|
||||
// Software reset!
|
||||
}
|
||||
}
|
89
src/reset.rs
89
src/reset.rs
@ -27,6 +27,53 @@ pub enum ResetReason {
|
||||
TaskWatchdog,
|
||||
/// Reset after exiting deep sleep mode
|
||||
DeepSleep,
|
||||
/// Reset by USB peripheral (introduced in IDF v5.1.4)
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
esp_idf_version_full = "5.1.0",
|
||||
esp_idf_version_full = "5.1.1",
|
||||
esp_idf_version_full = "5.1.2",
|
||||
esp_idf_version_full = "5.1.3",
|
||||
)))]
|
||||
USBPeripheral,
|
||||
/// Reset by JTAG (introduced in IDF v5.1.4)
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
esp_idf_version_full = "5.1.0",
|
||||
esp_idf_version_full = "5.1.1",
|
||||
esp_idf_version_full = "5.1.2",
|
||||
esp_idf_version_full = "5.1.3",
|
||||
)))]
|
||||
JTAG,
|
||||
/// Reset due to efuse error (introduced in IDF v5.2.2)
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
EfuseError,
|
||||
/// Reset due to power glitch detected (introduced in IDF v5.2.2)
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
PowerGlitch,
|
||||
/// Reset due to CPU lock up (introduced in IDF v5.2.2)
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
CPULockup,
|
||||
}
|
||||
|
||||
impl From<esp_reset_reason_t> for ResetReason {
|
||||
@ -44,6 +91,48 @@ impl From<esp_reset_reason_t> for ResetReason {
|
||||
esp_reset_reason_t_ESP_RST_BROWNOUT => Self::Brownout,
|
||||
esp_reset_reason_t_ESP_RST_TASK_WDT => Self::TaskWatchdog,
|
||||
esp_reset_reason_t_ESP_RST_DEEPSLEEP => Self::DeepSleep,
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
esp_idf_version_full = "5.1.0",
|
||||
esp_idf_version_full = "5.1.1",
|
||||
esp_idf_version_full = "5.1.2",
|
||||
esp_idf_version_full = "5.1.3",
|
||||
)))]
|
||||
esp_reset_reason_t_ESP_RST_USB => Self::USBPeripheral,
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
esp_idf_version_full = "5.1.0",
|
||||
esp_idf_version_full = "5.1.1",
|
||||
esp_idf_version_full = "5.1.2",
|
||||
esp_idf_version_full = "5.1.3",
|
||||
)))]
|
||||
esp_reset_reason_t_ESP_RST_JTAG => Self::JTAG,
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
esp_reset_reason_t_ESP_RST_EFUSE => Self::EfuseError,
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
esp_reset_reason_t_ESP_RST_PG => Self::PowerGlitch,
|
||||
#[cfg(not(any(
|
||||
esp_idf_version_major = "4",
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "0"),
|
||||
all(esp_idf_version_major = "5", esp_idf_version_minor = "1"),
|
||||
esp_idf_version_full = "5.2.0",
|
||||
esp_idf_version_full = "5.2.1",
|
||||
)))]
|
||||
esp_reset_reason_t_ESP_RST_CPU => Self::CPULockup,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user