2 #include <stdlib.h> // for NULL
6 static unsigned char on_pattern[] = {
13 static unsigned char blink_pattern[] = {
15 /* ../...-/..-/.../-.-/.-// */
16 /* 137 bits, 19.7% on */
36 /* ..-./../.-../../.--.// */
37 /* 124 bits, 19.4% on */
57 static unsigned char slow_pattern[] = {
64 static unsigned char light_mode;
68 unsigned char shutdown_in_progress : 1;
69 unsigned char pwmled_error : 1;
70 unsigned char battery_low : 1;
74 void set_error(unsigned char err)
95 void long_press_start()
97 e.shutdown_in_progress = 1;
106 if (++light_mode >= 2*N_PWMLED_MODES)
109 pwmled_set_target(light_mode < N_PWMLED_MODES
111 : light_mode - N_PWMLED_MODES);
120 void pwmled_pattern_select(unsigned char led)
122 if (e.shutdown_in_progress) {
123 led_set_pattern(led, 0, 0, NULL);
124 } else if (e.battery_low) {
125 led_set_pattern(led, 24, 0, slow_pattern);
126 } else if (light_mode == 0) {
127 led_set_pattern(led, 24, 0, slow_pattern);
128 } else if (light_mode < N_PWMLED_MODES) {
130 led_set_pattern(led, 137, 0, blink_pattern);
132 led_set_pattern(led, 124, 0, blink_pattern);
135 led_set_pattern(led, 8, 0, on_pattern);
139 void status_led_pattern_select(unsigned char led)
141 if (e.shutdown_in_progress) {
142 led_set_pattern(led, 8, 0, on_pattern);
143 } else if (e.pwmled_error) {
144 led_set_number_pattern(led, 1, 1);
145 } else if (e.battery_low) {
146 led_set_number_pattern(led, 1, 1);
148 led_set_number_pattern(led, battery_gauge(), 0);
157 led_set_pattern(N_PWMLEDS, status_led_pattern_select());
158 led_set_pattern(0, pwmled0_pattern_select());
165 led_set_pattern(N_PWMLEDS, status_led_pattern_select());
166 led_set_pattern(0, pwmled0_pattern_select());