X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=firmware%2Fpattern.c;h=55b1648bb162659b5a0eb3ece2558a5d356a037b;hb=014b5cfa49f3697ad13d717949327e4b790e20f9;hp=a39be3657c579a4e4cf8d5a5a65ebb61c729f7f8;hpb=b475975f99700f3e887df281130a3b9de62368c5;p=bike-lights.git diff --git a/firmware/pattern.c b/firmware/pattern.c index a39be36..55b1648 100644 --- a/firmware/pattern.c +++ b/firmware/pattern.c @@ -2,18 +2,15 @@ #include "lights.h" -typedef struct { - unsigned char mode: 3; - unsigned char duration: 5; -} pattern_t; - static unsigned char led_counters[N_LEDS]; static pattern_t *led_patterns[N_LEDS]; -#define PATTERN_END { 0, 0 } pattern_t off_pattern[] = { - { 0, 0x1F }, - PATTERN_END + { 0, PATTERN_FOREVER }, +}; + +pattern_t on_pattern[] = { + { 1, PATTERN_FOREVER }, }; pattern_t blink_pattern[] = { @@ -23,9 +20,9 @@ pattern_t blink_pattern[] = { }; pattern_t mode1_pattern[] = { - { 3, 0x1 }, + { 4, 0x1 }, { 0, 0x1 }, - { 3, 0x1 }, + { 4, 0x1 }, { 0, 0x8 }, { 1, 0x1 }, { 0, 0x1 }, @@ -55,26 +52,27 @@ pattern_t boot_pattern[] = { }; pattern_t pattern_num[] = { + { 0, 0x5 }, { 1, 0x1 }, /* 10 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 9 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 8 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 7 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 6 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 5 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 4 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 3 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 2 */ - { 0, 0x4 }, + { 0, 0x5 }, { 1, 0x1 }, /* 1 */ - { 0, 0x1F }, + { 0, 0x1E }, PATTERN_END }; @@ -103,33 +101,33 @@ void pattern_init() { unsigned char i; - for (i = 0; i < N_LEDS; i++) { - led_counters[i] = 0; - led_patterns[i] = off_pattern; - } + for (i = 0; i < N_LEDS; i++) + led_set_pattern(i, off_pattern); + led_set_pattern(N_PWMLEDS+1, boot_pattern); test_running = 0; } -static pattern_t *number_pattern(unsigned char num) +pattern_t *number_pattern(unsigned char num) { if (num >= 9) num = 9; return pattern_num + sizeof(pattern_num)/sizeof(pattern_t) - - 1 - 2*num; + - 2 - 2*num; } static inline pattern_t *pattern_select(unsigned char n) { if (n < N_PWMLEDS && !pwmled_enabled(n)) return off_pattern; // Don't mess with non-enabled LEDs - - if (n == 2) { + else if (n == 2) return mode1_pattern; - } - return number_pattern(1+ambient_zone); - // return off_pattern; + else if (n == 3) + return status_pattern_select(0); + else if (n == 4) + return status_pattern_select(1); + return off_pattern; } void patterns_next_tick() @@ -146,7 +144,8 @@ void patterns_next_tick() led_set_pattern(i, p); } - led_counters[i]--; + if (led_counters[i] < PATTERN_FOREVER) + led_counters[i]--; } }