X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=tinyboard.git;a=blobdiff_plain;f=projects%2Fstep-up%2Fpattern.c;h=693df1df9565664a21f3b370da636027411b7449;hp=55b64cc6e5bf23729d75c5a676c69708619999ff;hb=b02a7f779bb5da598bab17456d0afda65adc863b;hpb=15e2b46e5d25e1a9207b8b5d1bf104682167c225 diff --git a/projects/step-up/pattern.c b/projects/step-up/pattern.c index 55b64cc..693df1d 100644 --- a/projects/step-up/pattern.c +++ b/projects/step-up/pattern.c @@ -3,29 +3,10 @@ #include "lights.h" +#define N_LEDS 1 static unsigned char led_counters[N_LEDS]; static pattern_t *led_patterns[N_LEDS]; -static pattern_t boot_pattern[] = { - { 1, 0x6 }, - { 0, 0x6 }, - { 1, 0x3 }, - { 0, 0x3 }, - { 1, 0x2 }, - { 0, 0x2 }, - { 1, 0x1 }, - { 0, 0x1 }, - { 1, 0x1 }, - { 0, 0x1 }, - { 1, 0x1 }, - { 0, 0x1 }, - { 1, 0x1 }, - { 0, 0x1 }, - { 1, 0x10 }, - { 0, 0x10 }, - PATTERN_END -}; - static pattern_t pattern_num[] = { { 0, 0x5 }, { 1, 0x1 }, /* 10 */ @@ -81,12 +62,20 @@ pattern_t off_pattern[] = { PATTERN_END }; +pattern_t on1_pattern[] = { + { 1, 1 }, + { 0, 2 }, + { 1, 1 }, + { 0, 8 }, + { 1, 1 }, + { 0, 8 }, + PATTERN_END +}; + static void led_set_mode(unsigned char n, unsigned char mode) { - if (n < N_PWMLEDS) { - pwmled_set_mode(n, mode); - } else if (n < N_LEDS) { - gpio_set(n - N_PWMLEDS, mode); + if (n == 0) { + pwmled_on_off(mode); } } @@ -107,8 +96,6 @@ void init_pattern() for (i = 0; i < N_LEDS; i++) led_set_pattern(i, NULL); - - led_set_pattern(N_PWMLEDS+1, boot_pattern); } pattern_t *number_pattern(unsigned char num, unsigned char inv) @@ -129,13 +116,21 @@ pattern_t *number_pattern(unsigned char num, unsigned char inv) static pattern_t *pattern_select(unsigned char n) { + static unsigned char count; + static unsigned char mode; switch(n) { - case 0: return pwmled0_pattern_select(); - case 1: return pwmled1_pattern_select(); - case 2: return pwmled2_pattern_select(); - case 3: return status_led_pattern_select(); - case 4: return illumination_led_pattern_select(); - case 6: return laser_pattern_select(); + case 0: + if (++count > 2) { + count = 0; + if (mode == 0) { + mode = 3; + } else { + mode = 0; + } + + pwmled_set_target(mode); + } + return number_pattern(mode ? 2 : 3, 0); default: return NULL; } } @@ -154,14 +149,10 @@ static void inline pattern_finished(unsigned char n) led_patterns[n] = NULL; - if (n < N_PWMLEDS) { - for (i = 0; i < N_PWMLEDS; i++) - if (led_patterns[i]) - return; - - /* all pwmleds finished; restart them */ - for (i = 0; i < N_PWMLEDS; i++) - led_set_pattern(i, pattern_select(i)); + if (n == 0) { + led_set_pattern(0, pattern_select(0)); + } +#if 0 } else if (n == 3) { if (!led_patterns[4]) led_set_pattern(4, pattern_select(4)); @@ -171,6 +162,7 @@ static void inline pattern_finished(unsigned char n) } else { led_set_pattern(n, pattern_select(n)); } +#endif } void patterns_next_tick()