Loading projects/step-up/control.c +40 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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); } Loading projects/step-up/lights.h +3 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading projects/step-up/pwmled.c +2 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ static inline void pwmled_err() log_byte(0xF1); log_flush(); set_error(ERR_PWMLED); } Loading Loading
projects/step-up/control.c +40 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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); } Loading
projects/step-up/lights.h +3 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
projects/step-up/pwmled.c +2 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ static inline void pwmled_err() log_byte(0xF1); log_flush(); set_error(ERR_PWMLED); } Loading