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 // TODO: battery critical
130 return normal3_pattern;
136 switch (ambient_zone) {
137 case 0: return dim_mode ? NULL : on1_pattern;
138 case 1: return dim_mode ? NULL : slow2_pattern;
139 case 2: return dim_mode ? slow3_pattern : slow2_pattern;
141 default: return dim_mode ? slow3_pattern : normal4_pattern;
145 pattern_t *pwmled1_pattern_select()
147 // TODO: battery critical
153 switch (ambient_zone) {
156 return dim_mode ? on2_pattern : on1_pattern;
157 case 2: return dim_mode ? NULL : on2_pattern;
159 default: return dim_mode ? NULL : on3_pattern;
162 switch (ambient_zone) {
163 case 0: return dim_mode ? slow1_pattern : normal2_pattern;
164 case 1: return dim_mode ? slow2_pattern : normal3_pattern;
165 case 2: return dim_mode ? NULL : normal4_pattern;
167 default: return NULL;
172 pattern_t *pwmled2_pattern_select()
174 // TODO: battery critical
179 switch (ambient_zone) {
180 case 0: return dim_mode ? on2_pattern : on3_pattern;
181 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
185 return dim_mode ? slow2_pattern : normal3_pattern;
189 pattern_t *status_led_pattern_select()
191 if (buttons_setup_in_progress())
192 return buttons_setup_status0_pattern_select();
194 // FIXME: do something sane
195 return number_pattern(1 + ambient_zone, 0);
198 pattern_t *illumination_led_pattern_select()
200 // todo: 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(3, 0)
211 : number_pattern(4, 0);
213 default: return dim_mode
214 ? number_pattern(5, 0)
215 : number_pattern(6, 0);