2 #include <stdlib.h> // for NULL
6 static pattern_t panic_pattern[] = {
7 { 3, 1 }, // FIXME: will be 4, but let's be safe while testing
32 pattern_t on1_pattern [] = {
33 { 1, PATTERN_FOREVER }
36 static pattern_t on2_pattern [] = {
37 { 2, PATTERN_FOREVER }
40 static pattern_t on3_pattern [] = {
41 { 3, PATTERN_FOREVER }
44 static pattern_t normal2_pattern[] = {
56 static pattern_t normal3_pattern[] = {
68 static pattern_t normal4_pattern[] = {
80 static pattern_t slow1_pattern[] = {
86 static pattern_t slow2_pattern[] = {
92 static pattern_t slow3_pattern[] = {
98 static unsigned char dim_mode, towbar_mode;
106 void toggle_dim_mode()
108 dim_mode = !dim_mode;
112 void set_panic_mode()
115 led_set_pattern(0, panic_pattern);
117 led_set_pattern(1, panic_pattern);
118 led_set_pattern(2, panic_pattern);
119 led_set_pattern(4, panic_pattern);
122 pattern_t *pwmled0_pattern_select()
124 // TODO: battery critical
127 return normal3_pattern;
133 switch (ambient_zone) {
134 case 0: return dim_mode ? NULL : on1_pattern;
135 case 1: return dim_mode ? NULL : slow2_pattern;
136 case 2: return dim_mode ? slow3_pattern : slow2_pattern;
138 default: return dim_mode ? slow3_pattern : normal4_pattern;
142 pattern_t *pwmled1_pattern_select()
144 // TODO: battery critical
150 switch (ambient_zone) {
153 return dim_mode ? on2_pattern : on1_pattern;
154 case 2: return dim_mode ? NULL : on2_pattern;
156 default: return dim_mode ? NULL : on3_pattern;
159 switch (ambient_zone) {
160 case 0: return dim_mode ? slow1_pattern : normal2_pattern;
161 case 1: return dim_mode ? slow2_pattern : normal3_pattern;
162 case 2: return dim_mode ? NULL : normal4_pattern;
164 default: return NULL;
169 pattern_t *pwmled2_pattern_select()
171 // TODO: battery critical
176 switch (ambient_zone) {
177 case 0: return dim_mode ? on2_pattern : on3_pattern;
178 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
182 return dim_mode ? slow2_pattern : normal3_pattern;
186 pattern_t *status_led_pattern_select()
188 if (buttons_setup_in_progress())
189 return buttons_setup_status0_pattern_select();
191 // FIXME: do something sane
192 return number_pattern(1 + ambient_zone, 0);
195 pattern_t *illumination_led_pattern_select()
197 // todo: battery critical
199 switch (ambient_zone) {
200 case 0: return dim_mode
201 ? number_pattern(1, 1)
203 case 1: return dim_mode
204 ? number_pattern(2, 1)
205 : number_pattern(3, 1);
206 case 2: return dim_mode
207 ? number_pattern(3, 0)
208 : number_pattern(4, 0);
210 default: return dim_mode
211 ? number_pattern(5, 0)
212 : number_pattern(6, 0);