X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=pattern.c;h=06911707d059b5a05def1268c280df4a7238665b;hp=8552240d304165b2dd0378f4b88ea6b2cc083a32;hb=1d7ad9daee131c758cdf95b5608f602254f10427;hpb=4db795a97ff9bf1d859b797242df8f4564231f82 diff --git a/pattern.c b/pattern.c index 8552240..0691170 100644 --- a/pattern.c +++ b/pattern.c @@ -23,7 +23,11 @@ pattern_t blink_pattern[] = { }; pattern_t mode1_pattern[] = { - { 1, 0x1F }, + { 1, 0x1 }, + { 0, 0x1 }, + { 4, 0x1 }, + { 0, 0x1 }, + { 1, 0x1 }, PATTERN_END }; @@ -71,6 +75,8 @@ pattern_t pattern_num[] = { PATTERN_END }; +static unsigned char test_running; + void pattern_init() { unsigned char i; @@ -82,19 +88,37 @@ void pattern_init() led_patterns[N_PWMLEDS] = boot_pattern; led_counters[N_PWMLEDS] = boot_pattern->duration; gpio_set(GPIO_LED2, 1); + test_running = 0; } 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) { + if (test_running) { + log_byte(0xF7); + log_flush(); + return off_pattern; + } else { + test_running = 1; + log_byte(0xF6); + return mode1_pattern; + } + } return pattern_num + sizeof(pattern_num)/sizeof(pattern_t) - - 1 - 2*(1+ambient_zone);; + - 1 - 2*(1+ambient_zone); } -static void inline led_off(unsigned char n) +static void led_set_mode(unsigned char n, unsigned char mode) { - if (n == N_PWMLEDS) { - gpio_set(GPIO_LED2, 0); + if (n < N_PWMLEDS) { + pwmled_set_mode(n, mode); + } else if (n == N_PWMLEDS) { + gpio_set(GPIO_LED2, mode); } + // TODO LED 1 } static void inline led_set_level(unsigned char n, unsigned char level) @@ -115,11 +139,7 @@ void patterns_next_tick() led_patterns[i] = pattern_select(i); } led_counters[i] = led_patterns[i]->duration; - if (led_patterns[i]->mode == 0) { - led_off(i); - } else { - led_set_level(i, led_patterns[i]->mode - 1); - } + led_set_mode(i, led_patterns[i]->mode); } led_counters[i]--;