X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=firmware%2Fmain.c;h=0e3395779e9c7a2c84afd71d912ef4b64868bb9f;hp=5db08b17d7335ed07b370b775de44416819978e8;hb=90ffd122f4387d18e8d7cf7d2a507c719409d4e5;hpb=33c451a9ba18c59b405d735b2420bc7b549643a4 diff --git a/firmware/main.c b/firmware/main.c index 5db08b1..0e33957 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -3,83 +3,74 @@ #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(); - ambient_init(); - pattern_init(); + init_pwmled(); + init_gpio(); + init_ambient(); + init_pattern(); + init_control(); set_sleep_mode(SLEEP_MODE_IDLE); } -void hw_suspend() +static void hw_suspend() { susp_pwm(); susp_adc(); susp_tmr(); susp_gpio(); - wdt_disable(); + susp_ambient(); + susp_buttons(); } - void power_down() { - // enable PCINT14, so that user can wake up later - GIMSK |= _BV(PCIE1); - PCMSK1 |= _BV(PCINT14); - - // G'night - set_sleep_mode(SLEEP_MODE_PWR_DOWN); - sleep_enable(); - sleep_bod_disable(); - sei(); - sleep_cpu(); + hw_suspend(); - // G'morning - cli(); + do { + // G'night + set_sleep_mode(SLEEP_MODE_PWR_DOWN); + sleep_enable(); + sleep_bod_disable(); + sei(); + sleep_cpu(); - sleep_disable(); + // G'morning + cli(); + sleep_disable(); - // Disable PCINT14 - GIMSK &= ~_BV(PCIE1); - PCMSK1 &= ~_BV(PCINT14); + // allow wakeup by long button-press only + } while (!buttons_wait_for_release()); + // ok, so I will wake up hw_setup(); } - -ISR(PCINT_vect) -{ - GIMSK &= ~_BV(PCIE1); - PCMSK1 &= ~_BV(PCINT14); -} - int main(void) { - log_init(); + init_log(); + power_usi_disable(); // Once for lifetime + ACSRA |= _BV(ACD); // disable analog comparator log_set_state(3); hw_setup(); - hw_suspend(); power_down(); sei(); #if 1 while (1) { - wdt_reset(); sleep_mode(); } #endif