diff --git a/ch32v-insert-coin/src/app.rs b/ch32v-insert-coin/src/app.rs index 5775a60..f2e46c0 100644 --- a/ch32v-insert-coin/src/app.rs +++ b/ch32v-insert-coin/src/app.rs @@ -193,6 +193,7 @@ pub struct TimerConfig { pub usb_adc_timer_ms: usize, pub led0_timer_ms: usize, pub led1_timer_ms: usize, + pub shutdown_timer_ms: usize, // pub led2_timer_ms: usize, } @@ -203,6 +204,7 @@ pub struct Timers { usb_adc_timer: TickTimerService, led0_timer: TickTimerService, led1_timer: TickTimerService, + shutdown_timer: TickTimerService, // led2_timer: TickTimerService, } @@ -233,10 +235,13 @@ impl Timers { TickServiceData::new(config.led1_timer_ms * system_tick_rate_hz / 1000), true, ), - // led2_timer: TickTimerService::new( - // TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000), - // true, - // ), + shutdown_timer: TickTimerService::new( + TickServiceData::new(config.shutdown_timer_ms * system_tick_rate_hz / 1000), + false, + ), // led2_timer: TickTimerService::new( + // TickServiceData::new(config.led2_timer_ms * system_tick_rate_hz / 1000), + // true, + // ), } } pub fn tick(&mut self) { @@ -246,6 +251,7 @@ impl Timers { self.usb_adc_timer.tick(); self.led0_timer.tick(); self.led1_timer.tick(); + self.shutdown_timer.tick(); // self.led2_timer.tick(); } pub fn need_service(&self) -> bool { @@ -255,6 +261,7 @@ impl Timers { | self.usb_adc_timer.need_service() | self.led0_timer.need_service() | self.led1_timer.need_service() + | self.shutdown_timer.need_service() // | self.led2_timer.need_service() } pub fn init(&mut self) { @@ -345,6 +352,9 @@ impl App { self.timers.led1_timer.reset(); self.timers.led1_timer.enable(true); + self.timers.shutdown_timer.reset(); + self.timers.shutdown_timer.enable(true); + // self.timers.led2_timer.reset(); // self.timers.led2_timer.enable(true); @@ -394,14 +404,8 @@ impl App { // #[cfg(feature = "enable_print")] // println!("batt adc service: {bv}, {avg}"); if avg < 421 { - // self.services - // .sequencer - // .play_sequence(&crate::sequences::COIN_CHIRP, 0); self.set_state(State::DeepSleep); } - - // TODO: - // do stuff if the battery voltage is below some threshold } if self.timers.usb_adc_timer.need_service() { self.timers.usb_adc_timer.service(); @@ -442,6 +446,11 @@ impl App { // #[cfg(feature = "enable_print")] // println!("led1 service"); } + if self.timers.shutdown_timer.need_service() { + self.timers.shutdown_timer.service(); + self.timers.shutdown_timer.reset(); + self.set_state(State::DeepSleep); + } // if self.timers.led2_timer.need_service() { // let out = match self.settings.brightness { // Level::Off => 0, @@ -536,11 +545,15 @@ impl App { self.settings.volume.next(); #[cfg(feature = "enable_print")] println!("new volume: {:?}", self.settings.volume); + self.timers.shutdown_timer.reset(); + self.timers.shutdown_timer.enable(true); } pub fn brightness_button(&mut self) { self.settings.brightness.next(); #[cfg(feature = "enable_print")] println!("new brightness: {:?}", self.settings.brightness); + self.timers.shutdown_timer.reset(); + self.timers.shutdown_timer.enable(true); } pub fn main_button_press(&mut self) { // TODO @@ -548,8 +561,10 @@ impl App { println!("main button press"); self.timers.sp_timer.reset(); self.timers.lp_timer.reset(); + self.timers.shutdown_timer.reset(); self.timers.sp_timer.enable(true); self.timers.lp_timer.enable(true); + self.timers.shutdown_timer.enable(true); self.main_button_click(); } pub fn main_button_release(&mut self) { @@ -581,6 +596,8 @@ impl App { self.services .sequencer .play_sequence(&crate::sequences::COIN_CHIRP, 0); + self.timers.shutdown_timer.reset(); + self.timers.shutdown_timer.enable(true); } } diff --git a/ch32v-insert-coin/src/main.rs b/ch32v-insert-coin/src/main.rs index 5d75d4f..b46f114 100644 --- a/ch32v-insert-coin/src/main.rs +++ b/ch32v-insert-coin/src/main.rs @@ -297,6 +297,7 @@ fn app_main(mut p: hal::Peripherals) -> ! { usb_adc_timer_ms: 10000, led0_timer_ms: 100, led1_timer_ms: 100, + shutdown_timer_ms: 4 * 60 * 60 * 1000, // led2_timer_ms: 100, };