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 [] = {
37 static pattern_t on2_pattern [] = {
42 static pattern_t on3_pattern [] = {
47 static pattern_t normal2_pattern[] = {
59 static pattern_t normal3_pattern[] = {
71 static pattern_t normal4_pattern[] = {
83 static pattern_t slow1_pattern[] = {
89 static pattern_t slow2_pattern[] = {
95 static pattern_t slow3_pattern[] = {
101 static unsigned char dim_mode, towbar_mode;
109 void toggle_dim_mode()
111 dim_mode = !dim_mode;
115 void set_panic_mode()
118 led_set_pattern(0, panic_pattern);
120 led_set_pattern(1, panic_pattern);
121 led_set_pattern(2, panic_pattern);
122 led_set_pattern(4, panic_pattern);
125 pattern_t *pwmled0_pattern_select()
127 if (battery_critical)
133 switch (ambient_zone) {
134 case 0: return dim_mode ? NULL : on3_pattern;
135 case 1: return dim_mode ? NULL : normal3_pattern;
136 case 2: return dim_mode ? slow3_pattern : normal3_pattern;
138 default: return dim_mode ? slow3_pattern : normal4_pattern;
142 pattern_t *pwmled1_pattern_select()
147 if (battery_critical)
152 switch (ambient_zone) {
155 return dim_mode ? on2_pattern : on1_pattern;
156 case 2: return dim_mode ? NULL : on2_pattern;
158 default: return dim_mode ? NULL : on3_pattern;
161 switch (ambient_zone) {
162 case 0: return dim_mode ? slow1_pattern : normal2_pattern;
163 case 1: return dim_mode ? slow2_pattern : normal3_pattern;
164 case 2: return dim_mode ? NULL : normal4_pattern;
166 default: return NULL;
171 pattern_t *pwmled2_pattern_select()
174 if (battery_critical)
178 switch (ambient_zone) {
179 case 0: return dim_mode ? on2_pattern : on3_pattern;
180 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
184 return dim_mode ? slow2_pattern : normal3_pattern;
188 pattern_t *status_led_pattern_select()
190 if (buttons_setup_in_progress())
191 return buttons_setup_status0_pattern_select();
193 // FIXME: do something sane
194 return number_pattern(battery_gauge(), 0);
197 pattern_t *illumination_led_pattern_select()
199 if (battery_critical)
202 switch (ambient_zone) {
203 case 0: return dim_mode
204 ? number_pattern(1, 1)
206 case 1: return dim_mode
207 ? number_pattern(2, 1)
208 : number_pattern(3, 1);
209 case 2: return dim_mode
210 ? number_pattern(1, 0)
211 : number_pattern(2, 0);
213 default: return dim_mode
214 ? number_pattern(3, 0)
215 : number_pattern(4, 0);
219 pattern_t *laser_pattern_select()
221 if (!dim_mode && ambient_zone <= 1)
222 return number_pattern(2, 1);