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;fp=projects%2Fstep-up%2Fcontrol.c;h=99190cc45f2947e4b382e83cf1197b10b9613375;hp=c877c87ae82fc2482551cd9ab4211edbd88a76b7;hb=51ec86a430465eb671c7ae94e83557d89ddebb32;hpb=8b54d4bdf1305a636d6c1d03e6a725061f47c612 diff --git a/projects/step-up/control.c b/projects/step-up/control.c index c877c87..99190cc 100644 --- a/projects/step-up/control.c +++ b/projects/step-up/control.c @@ -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); }