diff --git a/apps/status.c b/apps/status.c index 2af3ea91a4..562cd50964 100644 --- a/apps/status.c +++ b/apps/status.c @@ -160,7 +160,7 @@ void status_draw(bool force_redraw) info.repeat = global_settings.repeat_mode; info.playmode = current_playmode(); #ifndef HAVE_LED - info.led = led_read(); + info.led = led_read(HZ/2); /* delay should match polling interval */ #endif /* only redraw if forced to, or info has changed */ @@ -241,8 +241,8 @@ void status_draw(bool force_redraw) statusbar_time(info.hour, info.minute); #endif #ifndef HAVE_LED - if (info.led) - statusbar_led(); + if (info.led) + statusbar_led(); #endif lcd_update_rect(0, 0, LCD_WIDTH, STATUSBAR_HEIGHT); lastinfo = info; diff --git a/firmware/drivers/led.c b/firmware/drivers/led.c index 4b63d07582..4598175b79 100644 --- a/firmware/drivers/led.c +++ b/firmware/drivers/led.c @@ -63,14 +63,14 @@ void invert_led(bool on) #else /* no LED, just status update */ -static long delay; +static long last_on; /* timestamp of switching off */ void led(bool on) { - if (current && !on) /* switching off */ - { - delay = current_tick + HZ/2; /* delay the "off" status a bit */ - } + if (current && !on) /* switching off */ + { + last_on = current_tick; /* remember for off delay */ + } current = on; } @@ -79,9 +79,10 @@ void invert_led(bool on) (void)on; /* no invert feature */ } -bool led_read(void) /* read by status bar update */ +bool led_read(int delayticks) /* read by status bar update */ { - return (current || TIME_BEFORE(current_tick, delay)); + /* reading "off" is delayed by user-supplied monoflop value */ + return (current || TIME_BEFORE(current_tick, last_on+delayticks)); } #endif // #ifdef HAVE_LED diff --git a/firmware/export/led.h b/firmware/export/led.h index d7322e465b..052da2633b 100644 --- a/firmware/export/led.h +++ b/firmware/export/led.h @@ -25,7 +25,7 @@ extern void led( bool on ); extern void invert_led( bool on ); #ifndef HAVE_LED -extern bool led_read(void); /* read for status bar */ +extern bool led_read(int delayticks); /* read for status bar */ #endif #endif