Commit 51ec86a4 authored by Jan Kasprzak's avatar Jan Kasprzak
Browse files

Error reporting via status LED

parent 8b54d4bd
...@@ -24,23 +24,48 @@ static pattern_t slow_pattern[] = { ...@@ -24,23 +24,48 @@ static pattern_t slow_pattern[] = {
PATTERN_END PATTERN_END
}; };
static unsigned char light_mode, shutdown_in_progress; static unsigned char light_mode;
static union {
unsigned char errors;
struct {
unsigned char shutdown_in_progress : 1;
unsigned char pwmled_error : 1;
unsigned char battery_low : 1;
};
} e;
void set_error(unsigned char err)
{
switch(err) {
case ERR_BATTERY:
e.battery_low = 1;
pwmled_set_target(0);
pattern_reload();
break;
case ERR_PWMLED:
e.pwmled_error = 1;
break;
}
}
void init_control() void init_control()
{ {
light_mode = 1; light_mode = 1;
shutdown_in_progress = 0; e.errors = 0;
short_press(); short_press();
} }
void long_press_start() void long_press_start()
{ {
shutdown_in_progress = 1; e.shutdown_in_progress = 1;
pattern_reload(); pattern_reload();
} }
void short_press() void short_press()
{ {
if (e.battery_low)
return;
if (++light_mode >= 2*N_PWMLED_MODES) if (++light_mode >= 2*N_PWMLED_MODES)
light_mode = 0; light_mode = 0;
...@@ -52,15 +77,18 @@ void short_press() ...@@ -52,15 +77,18 @@ void short_press()
void long_press() void long_press()
{ {
shutdown_in_progress = 0; e.shutdown_in_progress = 0;
pattern_reload(); pattern_reload();
} }
pattern_t *pwmled_pattern_select() pattern_t *pwmled_pattern_select()
{ {
if (shutdown_in_progress) if (e.shutdown_in_progress)
return NULL; return NULL;
if (e.battery_low)
return slow_pattern;
if (light_mode == 0) { if (light_mode == 0) {
return slow_pattern; return slow_pattern;
} else if (light_mode < N_PWMLED_MODES) { } else if (light_mode < N_PWMLED_MODES) {
...@@ -72,9 +100,15 @@ pattern_t *pwmled_pattern_select() ...@@ -72,9 +100,15 @@ pattern_t *pwmled_pattern_select()
pattern_t *status_led_pattern_select() pattern_t *status_led_pattern_select()
{ {
if (shutdown_in_progress) if (e.shutdown_in_progress)
return on_pattern; return on_pattern;
if (e.pwmled_error)
return number_pattern(3, 1);
if (e.battery_low)
return number_pattern(1, 1);
return number_pattern(light_mode+1, 0); return number_pattern(light_mode+1, 0);
} }
......
...@@ -77,6 +77,9 @@ void brake_on(); ...@@ -77,6 +77,9 @@ void brake_on();
void brake_off(); void brake_off();
pattern_t *pwmled_pattern_select(); pattern_t *pwmled_pattern_select();
pattern_t *status_led_pattern_select(); pattern_t *status_led_pattern_select();
#define ERR_BATTERY 1
#define ERR_PWMLED 2
void set_error(unsigned char err);
/* main.c */ /* main.c */
void power_down(); void power_down();
......
...@@ -74,6 +74,8 @@ static inline void pwmled_err() ...@@ -74,6 +74,8 @@ static inline void pwmled_err()
log_byte(0xF1); log_byte(0xF1);
log_flush(); log_flush();
set_error(ERR_PWMLED);
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment