#include #include #include #include #include #include "lights.h" static void hw_setup() { init_battery(); init_pwm(); init_adc(); init_tmr(); init_buttons(); init_pwmled(); init_gpio(); init_ambient(); init_pattern(); init_control(); set_sleep_mode(SLEEP_MODE_IDLE); } static void hw_suspend() { susp_pwm(); susp_adc(); susp_tmr(); susp_gpio(); susp_ambient(); susp_buttons(); } void power_down() { hw_suspend(); do { // G'night set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_bod_disable(); sei(); sleep_cpu(); // 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) { init_log(); 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) { sleep_mode(); } #endif #if 0 DDRB |= _BV(PB2); while (1) { PORTB |= _BV( PB2 ); _delay_ms(200); PORTB &=~ _BV( PB2 ); _delay_ms(200); } #endif }