2 #include <stdlib.h> // for NULL
7 static unsigned char bits_left[N_LEDS];
8 static unsigned char *pattern_data[N_LEDS];
9 static unsigned char current_bit[N_LEDS];
11 static unsigned char off_pattern[] = {
15 void led_set_pattern(unsigned char led, unsigned char bits_len,
16 unsigned char bits_start,
20 led_set_pattern(led, 8, 0, off_pattern);
22 bits_left[led] = bits_len-1;
23 current_bit[led] = bits_start;
24 pattern_data[led] = data;
28 void led_set_number_pattern(unsigned char led, unsigned char num,
31 static unsigned char pattern_num[] = {
43 static unsigned char pattern_invnum[] = {
55 unsigned char bits_len, bits_remaining;
60 bits_len = 6*num + 12;
61 bits_remaining = 9*8 - bits_len;
64 log_byte(bits_remaining & 7);
65 log_byte(bits_remaining >> 3);
67 led_set_pattern(led, bits_len, bits_remaining & 7,
68 inv ? pattern_invnum + (bits_remaining >> 3)
69 : pattern_num + (bits_remaining >> 3));
72 static void inline pattern_select(unsigned char n)
75 case 0: pwmled_pattern_select(n);
77 case 1: status_led_pattern_select(n);
82 static void inline led_set_mode(unsigned char n, unsigned char mode)
85 case 0: pwmled_on_off(mode); break;
86 case 1: status_led_on_off(mode); log_byte(mode); log_flush(); break;
90 void patterns_next_tick()
94 for (i = 0; i < N_LEDS; i++) {
100 if (current_bit[i] >= 8) {
106 led_set_mode(i, *(pattern_data[i]) & (1 << (7 - current_bit[i]))
115 for (i = 0; i < N_LEDS; i++)
116 led_set_pattern(i, 0, 0, NULL);
119 void pattern_reload()
123 for (i = 0; i < N_LEDS; i++)
126 patterns_next_tick();