#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[] = {
};
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
};
{
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)
else if (n == 2)
return mode1_pattern;
else if (n == 3)
- return number_pattern(1+ambient_zone);
+ return status_pattern_select(0);
+ else if (n == 4)
+ return status_pattern_select(1);
return off_pattern;
}
led_set_pattern(i, p);
}
- led_counters[i]--;
+ if (led_counters[i] < PATTERN_FOREVER)
+ led_counters[i]--;
}
}