X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=firmware%2Fmain.c;h=c8d1dd2aef5f60cac7c16cd80a3bce4960286d90;hb=5ac9213636816908d4030c78b9c5e9a837691f84;hp=efebdabafb5d2aa30571b65e49ca1683b006a2c6;hpb=f956c1fa7f47b0e8b8afe323c2eff1b6c2607c2a;p=bike-lights.git diff --git a/firmware/main.c b/firmware/main.c index efebdab..c8d1dd2 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -2,36 +2,75 @@ #include #include #include +#include #include #include "lights.h" -void hw_setup() +static void hw_setup() { + wdt_enable(WDTO_1S); + + init_battery(); init_pwm(); init_adc(); init_tmr(); init_buttons(); - pwmled_init(); - gpio_init(); + init_pwmled(); + init_gpio(); ambient_init(); pattern_init(); set_sleep_mode(SLEEP_MODE_IDLE); } -int main(void) +static void hw_suspend() { - log_init(); - wdt_enable(WDTO_1S); + susp_pwm(); + susp_adc(); + susp_tmr(); + susp_gpio(); + susp_buttons(); + + wdt_disable(); +} + +void power_down() +{ + hw_suspend(); + + do { + // G'night + set_sleep_mode(SLEEP_MODE_PWR_DOWN); + sleep_enable(); + sleep_bod_disable(); + sei(); + sleep_cpu(); - _delay_ms(100); + // G'morning + cli(); + sleep_disable(); + // allow wakeup by long button-press only + } while (!buttons_wait_for_release()); + + // ok, so I will wake up hw_setup(); +} + +int main(void) +{ + log_init(); + + power_usi_disable(); // Once for lifetime + ACSRA |= _BV(ACD); // disable analog comparator log_set_state(3); + hw_setup(); + power_down(); + sei(); #if 1 while (1) {