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
129 switch (ambient_zone) {
130 case 0: return dim_mode ? NULL : on1_pattern;
131 case 1: return dim_mode ? NULL : slow2_pattern;
132 case 2: return dim_mode ? slow3_pattern : slow2_pattern;
134 default: return dim_mode ? slow3_pattern : normal4_pattern;
138 pattern_t *pwmled1_pattern_select()
140 // TODO: battery critical
143 switch (ambient_zone) {
146 return dim_mode ? on2_pattern : on1_pattern;
147 case 2: return dim_mode ? NULL : on2_pattern;
149 default: return dim_mode ? NULL : on3_pattern;
152 switch (ambient_zone) {
153 case 0: return dim_mode ? slow1_pattern : normal2_pattern;
154 case 1: return dim_mode ? slow2_pattern : normal3_pattern;
155 case 2: return dim_mode ? NULL : normal4_pattern;
157 default: return NULL;
162 pattern_t *pwmled2_pattern_select()
164 // TODO: battery critical
166 switch (ambient_zone) {
167 case 0: return dim_mode ? on2_pattern : on3_pattern;
168 case 1: return dim_mode ? slow1_pattern : normal2_pattern;
172 return dim_mode ? slow2_pattern : normal3_pattern;
176 pattern_t *status_led_pattern_select()
178 if (buttons_setup_in_progress())
179 return buttons_setup_status0_pattern_select();
181 // FIXME: do something sane
182 return number_pattern(1 + ambient_zone, 1);
185 pattern_t *illumination_led_pattern_select()
187 // todo: battery critical
189 switch (ambient_zone) {
190 case 0: return dim_mode
191 ? number_pattern(1, 1)
193 case 1: return dim_mode
194 ? number_pattern(2, 1)
195 : number_pattern(3, 1);
196 case 2: return dim_mode
197 ? number_pattern(3, 0)
198 : number_pattern(4, 0);
200 default: return dim_mode
201 ? number_pattern(5, 0)
202 : number_pattern(6, 0);