X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=tinyboard.git;a=blobdiff_plain;f=projects%2Fstep-up%2Fcontrol.c;h=bdfe53d002c00aa89533faf35188479bd760f976;hp=c877c87ae82fc2482551cd9ab4211edbd88a76b7;hb=e6421ff2a4cecb87d997afff76dddc3eb1ba936a;hpb=8b54d4bdf1305a636d6c1d03e6a725061f47c612 diff --git a/projects/step-up/control.c b/projects/step-up/control.c index c877c87..bdfe53d 100644 --- a/projects/step-up/control.c +++ b/projects/step-up/control.c @@ -20,27 +20,52 @@ static pattern_t blink_pattern[] = { static pattern_t slow_pattern[] = { { 1, 0x1 }, - { 0, 0x1F }, + { 0, 0x18 }, 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,17 @@ void short_press() void long_press() { - shutdown_in_progress = 0; - pattern_reload(); + power_down(); } 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,10 +99,16 @@ pattern_t *pwmled_pattern_select() pattern_t *status_led_pattern_select() { - if (shutdown_in_progress) + if (e.shutdown_in_progress) return on_pattern; - return number_pattern(light_mode+1, 0); + if (e.pwmled_error) + return number_pattern(3, 1); + + if (e.battery_low) + return number_pattern(1, 1); + + return number_pattern(battery_gauge(), 0); } #if 0