root / toolbox / led.c @ master
History | View | Annotate | Download (860 Bytes)
1 | dc472500 | Tom Mullins | #include "led.h" |
---|---|---|---|
2 | 94548bf4 | Tom Mullins | #include "time.h" |
3 | dc472500 | Tom Mullins | |
4 | 1085ef77 | Tom Mullins | char blink_count;
|
5 | enum color_t blink_color;
|
||
6 | 94548bf4 | Tom Mullins | uint16_t blink_period, blink_ticks; |
7 | dc472500 | Tom Mullins | |
8 | 1085ef77 | Tom Mullins | static void led_color(enum color_t color) { |
9 | switch (color) {
|
||
10 | case OFF:
|
||
11 | led_off(); |
||
12 | break;
|
||
13 | case RED:
|
||
14 | led_red(); |
||
15 | break;
|
||
16 | case YELLOW:
|
||
17 | led_yellow(); |
||
18 | break;
|
||
19 | case GREEN:
|
||
20 | led_green(); |
||
21 | break;
|
||
22 | } |
||
23 | } |
||
24 | |||
25 | 94548bf4 | Tom Mullins | void led_tick() {
|
26 | if (blink_count) {
|
||
27 | if (++blink_ticks >= blink_period) {
|
||
28 | blink_ticks = 0;
|
||
29 | if (--blink_count % 2) { |
||
30 | led_color(blink_color); |
||
31 | } else {
|
||
32 | led_off(); |
||
33 | } |
||
34 | dc472500 | Tom Mullins | } |
35 | } |
||
36 | } |
||
37 | |||
38 | 1085ef77 | Tom Mullins | void led_blink_start(unsigned int period_ms, char n_times, enum color_t color) { |
39 | blink_count = n_times*2-1; |
||
40 | 94548bf4 | Tom Mullins | blink_period = period_ms/2/TICK_MS;
|
41 | blink_ticks = 0;
|
||
42 | 1085ef77 | Tom Mullins | blink_color = color; |
43 | led_color(color); |
||
44 | dc472500 | Tom Mullins | } |
45 | |||
46 | char led_blink_done() {
|
||
47 | 1085ef77 | Tom Mullins | return blink_count == 0; |
48 | dc472500 | Tom Mullins | } |