]> www.fi.muni.cz Git - tinyboard.git/blob - projects/step-up/main.c
Imported firmware from Project Bike Lights
[tinyboard.git] / projects / step-up / main.c
1 #include <avr/io.h>
2 #include <util/delay.h>
3 #include <avr/sleep.h>
4 #include <avr/interrupt.h>
5 #include <avr/power.h>
6 #include <avr/wdt.h>
7
8 #include "lights.h"
9
10 static void hw_setup()
11 {
12         wdt_enable(WDTO_1S);
13
14         init_battery();
15         init_pwm();
16         init_adc();
17         init_tmr();
18         init_buttons();
19
20         init_pwmled();
21         init_gpio();
22         init_ambient();
23         init_pattern();
24         init_control();
25
26         set_sleep_mode(SLEEP_MODE_IDLE);
27 }
28
29 static void hw_suspend()
30 {
31         susp_pwm();
32         susp_adc();
33         susp_tmr();
34         susp_gpio();
35         susp_buttons();
36
37         wdt_disable();
38 }
39
40 void power_down()
41 {
42         hw_suspend();
43
44         do {
45                 // G'night
46                 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
47                 sleep_enable();
48                 sleep_bod_disable();
49                 sei();
50                 sleep_cpu();
51
52                 // G'morning
53                 cli();
54                 sleep_disable();
55
56                 // allow wakeup by long button-press only
57         } while (!buttons_wait_for_release());
58
59         // ok, so I will wake up
60         hw_setup();
61 }
62
63 int main(void)
64 {
65         init_log();
66
67         power_usi_disable(); // Once for lifetime
68         ACSRA |= _BV(ACD);   // disable analog comparator
69
70         log_set_state(3);
71
72         hw_setup();
73         power_down();
74
75         sei();
76 #if 1
77         while (1) {
78                 wdt_reset();
79                 sleep_mode();
80         }
81 #endif
82
83 #if 0
84         DDRB |= _BV(PB2);
85         while (1) {
86                 PORTB |=  _BV( PB2 );
87                 _delay_ms(200);
88                 PORTB &=~ _BV( PB2 );
89                 _delay_ms(200);
90         }
91 #endif
92 }