diff options
| author | Selene ToyKeeper | 2023-11-02 17:16:25 -0600 |
|---|---|---|
| committer | Selene ToyKeeper | 2023-11-02 17:16:25 -0600 |
| commit | 7cb4fe0944b839f28dfd96a88a772cd6a8b58019 (patch) | |
| tree | 8d3b203f1650edc28b1f67e1589e3bc870b33fa6 /spaghetti-monster/fsm-standby.c | |
| parent | added LICENSE (GPLv3) (diff) | |
| download | anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.tar.gz anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.tar.bz2 anduril-7cb4fe0944b839f28dfd96a88a772cd6a8b58019.zip | |
reorganized project files (part 1)
(just moved files, didn't change the contents yet,
and nothing will work without updating #includes and build scripts and stuff)
Diffstat (limited to 'spaghetti-monster/fsm-standby.c')
| -rw-r--r-- | spaghetti-monster/fsm-standby.c | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/spaghetti-monster/fsm-standby.c b/spaghetti-monster/fsm-standby.c deleted file mode 100644 index 5def07c..0000000 --- a/spaghetti-monster/fsm-standby.c +++ /dev/null @@ -1,105 +0,0 @@ -// fsm-standby.c: standby mode functions for SpaghettiMonster. -// Copyright (C) 2017-2023 Selene ToyKeeper -// SPDX-License-Identifier: GPL-3.0-or-later - -#pragma once - -#include <avr/interrupt.h> -#include <avr/sleep.h> - -#include "fsm-adc.h" -#include "fsm-wdt.h" -#include "fsm-pcint.h" - -// low-power standby mode used while off but power still connected -#define standby_mode sleep_until_eswitch_pressed -void sleep_until_eswitch_pressed() -{ - #ifdef TICK_DURING_STANDBY - WDT_slow(); - #else - WDT_off(); - #endif - - ADC_off(); - - // make sure switch isn't currently pressed - while (button_is_pressed()) {} - empty_event_sequence(); // cancel pending input on suspend - - PCINT_on(); // wake on e-switch event - - #ifdef TICK_DURING_STANDBY - // detect which type of event caused a wake-up - irq_adc = 0; - irq_wdt = 0; - irq_pcint = 0; - while (go_to_standby) { - #else - go_to_standby = 0; - #endif - - // configure sleep mode - #ifdef TICK_DURING_STANDBY - // needs a special sleep mode during measurements - if (adc_active_now) adc_sleep_mode(); - else - #endif - set_sleep_mode(SLEEP_MODE_PWR_DOWN); - - sleep_enable(); - #ifdef BODCR // only do this on MCUs which support it - sleep_bod_disable(); - #endif - sleep_cpu(); // wait here - - // something happened; wake up - sleep_disable(); - - #ifdef TICK_DURING_STANDBY - // determine what woke us up... - if (irq_pcint) { // button pressed; wake up - go_to_standby = 0; - } - if (irq_adc) { // ADC done measuring - #ifndef USE_LOWPASS_WHILE_ASLEEP - adc_reset = 1; // don't lowpass while asleep - #endif - adc_deferred_enable = 1; - adc_deferred(); - //ADC_off(); // takes care of itself - //irq_adc = 0; // takes care of itself - } - if (irq_wdt) { // generate a sleep tick - WDT_inner(); - } - } - #endif - - // don't lowpass immediately after waking - // also, reset thermal history - adc_reset = 2; - - // go back to normal running mode - // PCINT not needed any more, and can cause problems if on - // (occasional reboots on wakeup-by-button-press) - PCINT_off(); - // restore normal awake-mode interrupts - ADC_on(); - WDT_on(); -} - -#ifdef USE_IDLE_MODE -void idle_mode() -{ - // configure sleep mode - set_sleep_mode(SLEEP_MODE_IDLE); - - sleep_enable(); - sleep_cpu(); // wait here - - // something happened; wake up - sleep_disable(); -} -#endif - |
