2 #include <stdlib.h> // for NULL
6 static pattern_t panic_pattern[] = {
7 { 3, D_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 brake_pattern [] = {
53 static pattern_t normal2_pattern[] = {
65 static pattern_t normal3_pattern[] = {
77 static pattern_t normal4_pattern[] = {
89 static pattern_t slow1_pattern[] = {
95 static pattern_t slow2_pattern[] = {
101 static pattern_t slow3_pattern[] = {
107 static pattern_t tmp1_pattern[] = {
108 { PWM_PAT(3, 0, 0), D_1 },
109 { PWM_PAT(0, 0, 1), D_1 },
110 { PWM_PAT(3, 0, 0), D_1 },
111 { PWM_PAT(0, 0, 1), D_1 },
112 { PWM_PAT(0, 0, 0), D_3 },
113 { PWM_PAT(0, 1, 0), D_1 },
114 { PWM_PAT(0, 0, 0), D_5 },
115 { PWM_PAT(1, 0, 0), D_1 },
116 { PWM_PAT(0, 0, 3), D_1 },
117 { PWM_PAT(1, 0, 0), D_1 },
118 { PWM_PAT(0, 0, 3), D_1 },
119 { PWM_PAT(0, 0, 0), D_5 },
120 { PWM_PAT(0, 1, 0), D_1 },
121 { PWM_PAT(0, 0, 0), D_3 },
125 static unsigned char dim_mode, towbar_mode, braking;
138 led_set_pattern(N_STATUS_LED, status_led_pattern_select());
139 led_set_pattern(0, pwmled_pattern_select());
146 led_set_pattern(N_STATUS_LED, status_led_pattern_select());
147 led_set_pattern(0, pwmled_pattern_select());
150 void toggle_dim_mode()
152 dim_mode = !dim_mode;
156 void set_panic_mode()
158 led_set_pattern(0, panic_pattern);
159 led_set_pattern(N_ILLUM_LED, panic_pattern);
162 pattern_t *pwmled_pattern_select()
166 if (battery_critical)
173 return brake_pattern;
175 switch (ambient_zone) {
176 case 0: return dim_mode ? NULL : number_pattern(2, 1);
177 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
178 case 2: return dim_mode ? slow2_pattern : normal3_pattern;
180 default: return dim_mode ? slow3_pattern : normal4_pattern;
184 pattern_t *status_led_pattern_select()
189 if (buttons_setup_in_progress())
190 return buttons_setup_status0_pattern_select();
192 // FIXME: do something sane
193 return number_pattern(battery_gauge(), 0);
196 pattern_t *illumination_led_pattern_select()
198 if (battery_critical)
201 switch (ambient_zone) {
202 case 0: return dim_mode
203 ? number_pattern(1, 1)
205 case 1: return dim_mode
206 ? number_pattern(2, 1)
207 : number_pattern(3, 1);
208 case 2: return dim_mode
209 ? number_pattern(1, 0)
210 : number_pattern(2, 0);
212 default: return dim_mode
213 ? number_pattern(3, 0)
214 : number_pattern(4, 0);
218 pattern_t *laser_pattern_select()
220 if (!dim_mode && ambient_zone <= 1)
221 return number_pattern(2, 1);