X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=firmware%2Fpattern.c;h=669225860c4d11583fba63693e653ecc60fe063e;hp=3354c6f5e5d59b8a46e4c5991d736ab70e6e4a55;hb=1d5dfb4d273a61877eb5937f93fbd266b782bc7a;hpb=8865db8363413d05d188b50b0a10928cf119f68d diff --git a/firmware/pattern.c b/firmware/pattern.c index 3354c6f..6692258 100644 --- a/firmware/pattern.c +++ b/firmware/pattern.c @@ -87,10 +87,12 @@ pattern_t off_pattern[] = { static void led_set_mode(unsigned char n, unsigned char mode) { - if (n < N_PWMLEDS) { - pwmled_set_mode(n, mode); + if (n == 0) { + pwmled_set_mode(0, mode & 3); + pwmled_set_mode(1, (mode >> 2) & 1); + pwmled_set_mode(2, (mode >> 3) & 3); } else if (n < N_LEDS) { - gpio_set(n - N_PWMLEDS, mode); + gpio_set(n - 1, mode); } } @@ -113,7 +115,7 @@ void init_pattern() for (i = 0; i < N_LEDS; i++) led_set_pattern(i, NULL); - led_set_pattern(N_PWMLEDS+1, boot_pattern); + led_set_pattern(N_ILLUM_LED, boot_pattern); } pattern_t *number_pattern(unsigned char num, unsigned char inv) @@ -135,12 +137,10 @@ pattern_t *number_pattern(unsigned char num, unsigned char inv) static pattern_t *pattern_select(unsigned char n) { 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: return pwmled_pattern_select(); + case N_STATUS_LED: return status_led_pattern_select(); + case N_ILLUM_LED: return illumination_led_pattern_select(); + case N_LASER_LED: return laser_pattern_select(); default: return NULL; } } @@ -159,20 +159,16 @@ 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)); - } else if (n == 3) { - if (!led_patterns[4]) - led_set_pattern(4, pattern_select(4)); - } else if (n == 4) { - if (!led_patterns[3]) - led_set_pattern(3, pattern_select(3)); + if (n == 0) { + led_set_pattern(0, pattern_select(0)); + } else if (n == N_STATUS_LED) { + if (!led_patterns[N_ILLUM_LED]) + led_set_pattern(N_ILLUM_LED, + pattern_select(N_ILLUM_LED)); + } else if (n == N_ILLUM_LED) { + if (!led_patterns[N_STATUS_LED]) + led_set_pattern(N_STATUS_LED, + pattern_select(N_STATUS_LED)); } else { led_set_pattern(n, pattern_select(n)); }