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, braking;
113 led_set_pattern(N_PWMLEDS, status_led_pattern_select());
114 // TODO brighten rear light
121 led_set_pattern(N_PWMLEDS, status_led_pattern_select());
122 // TODO dim rear light
125 void toggle_dim_mode()
127 dim_mode = !dim_mode;
131 void set_panic_mode()
134 led_set_pattern(0, panic_pattern);
136 led_set_pattern(1, panic_pattern);
137 led_set_pattern(2, panic_pattern);
138 led_set_pattern(4, panic_pattern);
141 pattern_t *pwmled0_pattern_select()
143 if (battery_critical)
149 switch (ambient_zone) {
150 case 0: return dim_mode ? NULL : on3_pattern;
151 case 1: return dim_mode ? NULL : normal3_pattern;
152 case 2: return dim_mode ? slow3_pattern : normal3_pattern;
154 default: return dim_mode ? slow3_pattern : normal4_pattern;
158 pattern_t *pwmled1_pattern_select()
163 if (battery_critical)
168 switch (ambient_zone) {
171 return dim_mode ? on2_pattern : on1_pattern;
172 case 2: return dim_mode ? NULL : on2_pattern;
174 default: return dim_mode ? NULL : on3_pattern;
177 switch (ambient_zone) {
178 case 0: return dim_mode ? slow1_pattern : normal2_pattern;
179 case 1: return dim_mode ? slow2_pattern : normal3_pattern;
180 case 2: return dim_mode ? NULL : normal4_pattern;
182 default: return NULL;
187 pattern_t *pwmled2_pattern_select()
190 if (battery_critical)
194 switch (ambient_zone) {
195 case 0: return dim_mode ? on2_pattern : on3_pattern;
196 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
200 return dim_mode ? slow2_pattern : normal3_pattern;
204 pattern_t *status_led_pattern_select()
209 if (buttons_setup_in_progress())
210 return buttons_setup_status0_pattern_select();
212 // FIXME: do something sane
213 return number_pattern(battery_gauge(), 0);
216 pattern_t *illumination_led_pattern_select()
218 if (battery_critical)
221 switch (ambient_zone) {
222 case 0: return dim_mode
223 ? number_pattern(1, 1)
225 case 1: return dim_mode
226 ? number_pattern(2, 1)
227 : number_pattern(3, 1);
228 case 2: return dim_mode
229 ? number_pattern(1, 0)
230 : number_pattern(2, 0);
232 default: return dim_mode
233 ? number_pattern(3, 0)
234 : number_pattern(4, 0);
238 pattern_t *laser_pattern_select()
240 if (!dim_mode && ambient_zone <= 1)
241 return number_pattern(2, 1);