Skip to content

Commit 90c0b7c

Browse files
committed
remove std use in sleep.rs
1 parent 0e4faf6 commit 90c0b7c

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

examples/deep_sleep.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use esp_idf_hal::sleep::DeepSleep;
1010
use esp_idf_hal::sleep::Sleep;
1111
use esp_idf_hal::sleep::WakeupSource;
1212
use std::thread;
13-
use std::time::Duration;
13+
use core::time::Duration;
1414

1515
fn main() -> anyhow::Result<()> {
1616
esp_idf_sys::link_patches();

examples/light_sleep.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use esp_idf_hal::sleep::LightSleep;
88
use esp_idf_hal::sleep::Sleep;
99
use esp_idf_hal::sleep::WakeupSource;
1010
use std::thread;
11-
use std::time::Duration;
11+
use core::time::Duration;
1212
use std::time::Instant;
1313

1414
fn print_wakeup_result(time_before: Instant) {

src/sleep.rs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
//! Currently implemented Timer and UART wakeup sources.
44
55
use esp_idf_sys::*;
6-
use std::time::Duration;
6+
use core::time::Duration;
77

8-
#[derive(Debug)]
8+
const MAX_WAKEUP_SOURCES: usize = 10;
9+
10+
#[derive(Default, Debug)]
911
pub enum WakeupSource {
12+
#[default]
13+
None,
1014
Timer { dur: Duration },
1115
Uart { uart_num: i32, threshold: i32 },
1216
// TODO: add more sources
@@ -15,6 +19,7 @@ pub enum WakeupSource {
1519
impl WakeupSource {
1620
pub fn apply(&self) -> Result<(), EspError> {
1721
match *self {
22+
WakeupSource::None => {}
1823
WakeupSource::Timer { dur } => {
1924
esp!(unsafe { esp_sleep_enable_timer_wakeup(dur.as_micros() as u64) })?;
2025
}
@@ -48,7 +53,8 @@ pub trait Sleep {
4853

4954
#[derive(Default, Debug)]
5055
pub struct LightSleep {
51-
wakeup_sources: Vec<WakeupSource>,
56+
wakeup_sources: [WakeupSource; MAX_WAKEUP_SOURCES],
57+
n_wakeup_sources: usize,
5258
}
5359

5460
impl LightSleep {
@@ -63,7 +69,11 @@ impl LightSleep {
6369

6470
impl Sleep for LightSleep {
6571
fn add_wakeup_source(&mut self, wakeup: WakeupSource) -> Result<(), EspError> {
66-
self.wakeup_sources.push(wakeup);
72+
if self.n_wakeup_sources >= MAX_WAKEUP_SOURCES {
73+
return Err(EspError::from_infallible::<ESP_FAIL>())
74+
}
75+
self.wakeup_sources[self.n_wakeup_sources] = wakeup;
76+
self.n_wakeup_sources += 1;
6777
Ok(())
6878
}
6979

@@ -77,7 +87,8 @@ impl Sleep for LightSleep {
7787

7888
#[derive(Default, Debug)]
7989
pub struct DeepSleep {
80-
wakeup_sources: Vec<WakeupSource>,
90+
wakeup_sources: [WakeupSource; MAX_WAKEUP_SOURCES],
91+
n_wakeup_sources: usize,
8192
}
8293

8394
impl DeepSleep {
@@ -95,12 +106,18 @@ impl Sleep for DeepSleep {
95106
if matches!(wakeup, WakeupSource::Uart { .. }) {
96107
return Err(EspError::from_infallible::<ESP_ERR_INVALID_ARG>());
97108
}
98-
self.wakeup_sources.push(wakeup);
109+
110+
if self.n_wakeup_sources >= MAX_WAKEUP_SOURCES {
111+
return Err(EspError::from_infallible::<ESP_FAIL>())
112+
}
113+
self.wakeup_sources[self.n_wakeup_sources] = wakeup;
114+
self.n_wakeup_sources += 1;
115+
99116
Ok(())
100117
}
101118

102119
fn sleep(&self) -> Result<(), EspError> {
103-
self.apply_wakeup_sources(&self.wakeup_sources)?;
120+
self.apply_wakeup_sources(&self.wakeup_sources[0..self.n_wakeup_sources])?;
104121

105122
unsafe { esp_deep_sleep_start() };
106123
#[allow(unreachable_code)]

0 commit comments

Comments
 (0)