diff options
-rw-r--r-- | apps/settings_menu.c | 10 | ||||
-rw-r--r-- | firmware/backlight.c | 24 |
2 files changed, 26 insertions, 8 deletions
diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 3def0574a1..517716ef3c 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -59,9 +59,13 @@ static void sort_case(void) static void backlight_timer(void) { - set_int( "[Backlight]", "s", &global_settings.backlight, - backlight_time, 1, 0, 60 ); - backlight_on(); + char* names[] = { "off", "on ", + "1s ", "2s ", "3s ", "4s ", "5s ", + "6s ", "7s ", "8s ", "9s ", "10s", + "15s", "20s", "25s", "30s", "45s", + "60s", "90s"}; + set_option("[Backlight]", &global_settings.backlight, names, 19 ); + backlight_time(global_settings.backlight); } static void scroll_speed(void) diff --git a/firmware/backlight.c b/firmware/backlight.c index 9fe73f4d9a..b7f4761415 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c @@ -37,6 +37,11 @@ static struct event_queue backlight_queue; static int backlight_timer; static int backlight_timeout = 5; +static char timeout_value[19] = +{ + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 45, 60, 90 +}; + void backlight_thread(void) { struct event ev; @@ -47,8 +52,17 @@ void backlight_thread(void) switch(ev.id) { case BACKLIGHT_ON: - backlight_timer = HZ*backlight_timeout; - if(backlight_timer) + backlight_timer = HZ*timeout_value[backlight_timeout]; + if(backlight_timer < 0) + { +#ifdef HAVE_RTC + /* Disable square wave */ + rtc_write(0x0a, rtc_read(0x0a) & ~0x40); +#else + PADR |= 0x4000; +#endif + } + else if(backlight_timer) { #ifdef HAVE_RTC /* Enable square wave */ @@ -65,7 +79,7 @@ void backlight_thread(void) rtc_write(0x0a, rtc_read(0x0a) & ~0x40); #else PADR |= 0x4000; -#endif +#endif break; case SYS_USB_CONNECTED: @@ -91,9 +105,9 @@ void backlight_off(void) queue_post(&backlight_queue, BACKLIGHT_OFF, NULL); } -void backlight_time(int seconds) +void backlight_time(int value) { - backlight_timeout = seconds; + backlight_timeout = value; backlight_on(); } |