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

Error reporting via status LED

parent 8b54d4bd
Loading
Loading
Loading
Loading
+40 −6
Original line number Diff line number Diff line
@@ -24,23 +24,48 @@ static pattern_t slow_pattern[] = {
	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()
{
	light_mode = 1;
	shutdown_in_progress = 0;
	e.errors = 0;
	short_press();
}

void long_press_start()
{
	shutdown_in_progress = 1;
	e.shutdown_in_progress = 1;
	pattern_reload();
}

void short_press()
{
	if (e.battery_low)
		return;

	if (++light_mode >= 2*N_PWMLED_MODES)
		light_mode = 0;

@@ -52,15 +77,18 @@ void short_press()

void long_press()
{
	shutdown_in_progress = 0;
	e.shutdown_in_progress = 0;
	pattern_reload();
}

pattern_t *pwmled_pattern_select()
{
	if (shutdown_in_progress)
	if (e.shutdown_in_progress)
		return NULL;

	if (e.battery_low)
		return slow_pattern;

	if (light_mode == 0) {
		return slow_pattern;
	} else if (light_mode < N_PWMLED_MODES) {
@@ -72,9 +100,15 @@ pattern_t *pwmled_pattern_select()

pattern_t *status_led_pattern_select()
{
	if (shutdown_in_progress)
	if (e.shutdown_in_progress)
		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);
}

+3 −0
Original line number Diff line number Diff line
@@ -77,6 +77,9 @@ void brake_on();
void brake_off();
pattern_t *pwmled_pattern_select();
pattern_t *status_led_pattern_select();
#define ERR_BATTERY 1
#define ERR_PWMLED  2
void set_error(unsigned char err);

/* main.c */
void power_down();
+2 −0
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ static inline void pwmled_err()

	log_byte(0xF1);
	log_flush();

	set_error(ERR_PWMLED);
}