Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/apps/action.c b/apps/action.c
- index 44980cd..ef692d9 100644
- --- apps/action.c
- +++ apps/action.c
- @@ -150,6 +150,39 @@
- items[i].action_code;
- }
- +static bool backlight_on_action(int action)
- +{
- + /* no backlight on volume change and pause/play */
- + return (action != ACTION_WPS_VOLUP)
- + && (action != ACTION_WPS_VOLDOWN)
- + && (action != ACTION_WPS_SKIPNEXT)
- + && (action != ACTION_WPS_SKIPPREV)
- + && (action != ACTION_WPS_PLAY)
- + && (action != ACTION_WPS_HOTKEY)
- + && (action != ACTION_WPS_VIEW_PLAYLIST);
- +}
- +
- +static bool backlight_on_keypress_oracle(int btn)
- +{
- + /* check whether the button would fire an action */
- + /* If yes, check whether that action should turn on the backlight */
- + /* Keep this function fast! It's called from the button ticktask */
- + /* or the scrollwheel interrupt handler! */
- +
- + const struct button_mapping *items = NULL;
- + int i = 0;
- +
- + if (!global_settings.backlight_on_volume_change)
- + {
- + items = get_context_mapping(CONTEXT_WPS);
- + /* also check action for button release */
- + return backlight_on_action(do_button_check(items, btn, BUTTON_NONE, &i))
- + && backlight_on_action(do_button_check(items, btn | BUTTON_REL, btn, &i));
- + }
- + else
- + return true;
- +}
- +
- #if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
- /* Timeout for gui boost in seconds. */
- @@ -209,6 +242,16 @@
- send_event(GUI_EVENT_ACTIONUPDATE, NULL);
- + /* In CONTEXT_WPS or CONTEXT_FM we may want to keep the backlight off */
- + /* on certain actions. */
- + /* Thus, a callback function is used to check if it should turn on. */
- + /* See also button.c */
- + if ( (context & ~ALLOW_SOFTLOCK) == CONTEXT_WPS
- + || (context & ~ALLOW_SOFTLOCK) == CONTEXT_FM )
- + set_backlight_on_keypress_oracle(backlight_on_keypress_oracle);
- + else
- + set_backlight_on_keypress_oracle(NULL);
- +
- if (timeout == TIMEOUT_NOBLOCK)
- button = button_get(false);
- else if (timeout == TIMEOUT_BLOCK)
- diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang
- index ad709cc..3b9e3f2 100644
- --- apps/lang/deutsch.lang
- +++ apps/lang/deutsch.lang
- @@ -2595,6 +2595,20 @@
- </voice>
- </phrase>
- <phrase>
- + id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
- + desc: Backlight on volume change and on pause/play
- + user: core
- + <source>
- + *: "Backlight On Volume Change"
- + </source>
- + <dest>
- + *: "Beleuchtung bei Änderung der Lautstärke"
- + </dest>
- + <voice>
- + *: "Beleuchtung bei Änderung der Lautstärke"
- + </voice>
- +</phrase>
- +<phrase>
- id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
- desc: In display settings, time to switch LCD chip into power saving state
- user: core
- diff --git a/apps/lang/english.lang b/apps/lang/english.lang
- index 627fda8..f2b06dc 100644
- --- apps/lang/english.lang
- +++ apps/lang/english.lang
- @@ -2678,6 +2678,20 @@
- </voice>
- </phrase>
- <phrase>
- + id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
- + desc: Backlight on volume change and on pause/play
- + user: core
- + <source>
- + *: "Backlight on Volume Change"
- + </source>
- + <dest>
- + *: "Backlight on Volume Change"
- + </dest>
- + <voice>
- + *: "Backlight on Volume Change"
- + </voice>
- +</phrase>
- +<phrase>
- id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
- desc: In display settings, time to switch LCD chip into power saving state
- user: core
- diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang
- index 420e85b..96d57fd 100644
- --- apps/lang/russian.lang
- +++ apps/lang/russian.lang
- @@ -7622,6 +7622,20 @@
- </voice>
- </phrase>
- <phrase>
- + id: LANG_BACKLIGHT_ON_VOLUME_CHANGE
- + desc: Backlight on volume change and on pause/play
- + user: core
- + <source>
- + *: "Backlight on Volume Change"
- + </source>
- + <dest>
- + *: "Подсветка при изменении Громкости"
- + </dest>
- + <voice>
- + *: "Подсветка при изменении Громкости"
- + </voice>
- +</phrase>
- +<phrase>
- id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF
- desc: In display settings, time to switch LCD chip into power saving state
- user: core
- diff --git a/apps/settings.h b/apps/settings.h
- index d0fd320..b92a5c7 100644
- --- apps/settings.h
- +++ apps/settings.h
- @@ -682,6 +682,8 @@
- then according to timeout_values[] */
- bool caption_backlight; /* turn on backlight at end and start of track */
- bool bl_filter_first_keypress; /* filter first keypress when dark? */
- + bool backlight_on_volume_change; /* turn on the backlight on volume change
- + and on pause/play? */
- #if CONFIG_CHARGING
- int backlight_timeout_plugged;
- #endif
- diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c
- index 3e1443d..664752d 100644
- --- apps/menus/display_menu.c
- +++ apps/menus/display_menu.c
- @@ -103,6 +103,9 @@
- MENUITEM_SETTING(bl_filter_first_keypress,
- &global_settings.bl_filter_first_keypress,
- filterfirstkeypress_callback);
- +MENUITEM_SETTING(backlight_on_volume_change,
- + &global_settings.backlight_on_volume_change,
- + NULL);
- #ifdef HAVE_LCD_SLEEP_SETTING
- MENUITEM_SETTING(lcd_sleep_after_backlight_off,
- &global_settings.lcd_sleep_after_backlight_off, NULL);
- @@ -140,6 +143,7 @@
- ,&backlight_fade_in, &backlight_fade_out
- #endif
- ,&bl_filter_first_keypress
- + ,&backlight_on_volume_change
- # ifdef HAVE_LCD_SLEEP_SETTING
- ,&lcd_sleep_after_backlight_off
- # endif
- diff --git a/apps/settings_list.c b/apps/settings_list.c
- index 44295ac..ff34cd6 100644
- --- apps/settings_list.c
- +++ apps/settings_list.c
- @@ -926,6 +926,9 @@
- OFFON_SETTING(0, bl_filter_first_keypress,
- LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
- "backlight filters first keypress", NULL),
- + OFFON_SETTING(0, backlight_on_volume_change,
- + LANG_BACKLIGHT_ON_VOLUME_CHANGE, true,
- + "backlight on volume change", NULL),
- #ifdef HAVE_REMOTE_LCD
- OFFON_SETTING(0, remote_bl_filter_first_keypress,
- LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false,
- diff --git a/firmware/export/button.h b/firmware/export/button.h
- index 3f6052a..4a4456d 100644
- --- firmware/export/button.h
- +++ firmware/export/button.h
- @@ -64,6 +64,23 @@
- #endif
- #ifdef HAVE_BACKLIGHT
- void set_backlight_filter_keypress(bool value);
- +
- +/* Callback function to tell whether the backlight should be turned on
- + * when a key is pressed. Called just after a key press.
- + *
- + * @param btn The button that was pressed
- + *
- + * Returns true iff the backlight should be turned on on key press.
- + */
- +typedef bool (*backlight_on_keypress_oracle_func)(int btn);
- +
- +/* Sets the new 'oracle' to tell whether the backlight should be turned
- + * on when a key is pressed. Passing NULL as parameter will turn on the BL
- + * on every key press.
- + */
- +void set_backlight_on_keypress_oracle(backlight_on_keypress_oracle_func func);
- +void backlight_on_by_button(int btn);
- +
- #ifdef HAVE_REMOTE_LCD
- void set_remote_backlight_filter_keypress(bool value);
- #endif
- diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
- index 8244c47..0f7d16c 100644
- --- firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
- +++ firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
- @@ -168,7 +168,7 @@
- (wheel_delta << 24) | wheel_velocity*360/WHEELCLICKS_PER_ROTATION);
- /* message posted - reset delta and poke backlight on*/
- wheel_delta = 1;
- - backlight_on();
- + backlight_on_by_button(btn);
- buttonlight_on();
- }
- else
- diff --git a/firmware/target/arm/ipod/button-clickwheel.c b/firmware/target/arm/ipod/button-clickwheel.c
- index 2abe25f..f8fd7d5 100644
- --- firmware/target/arm/ipod/button-clickwheel.c
- +++ firmware/target/arm/ipod/button-clickwheel.c
- @@ -137,8 +137,7 @@
- new_wheel_value = (status >> 16) & 0x7f;
- whl = new_wheel_value;
- - /* switch on backlight (again), reset power-off timer */
- - backlight_on();
- + /* reset power-off timer */
- reset_poweroff_timer();
- /* Check whether the scrollwheel was untouched by accident or by will. */
- @@ -181,6 +180,9 @@
- if (wheel_keycode != BUTTON_NONE)
- {
- + /* switch on backlight (again) */
- + backlight_on_by_button(wheel_keycode);
- +
- long v = (usec - last_wheel_usec) & 0x7fffffff;
- /* undo signedness */
- diff --git a/firmware/target/arm/ipod/button-1g-3g.c b/firmware/target/arm/ipod/button-1g-3g.c
- index 045a0f6..790ed24 100644
- --- firmware/target/arm/ipod/button-1g-3g.c
- +++ firmware/target/arm/ipod/button-1g-3g.c
- @@ -95,13 +95,6 @@
- count = 0;
- }
- - /* poke backlight every 1/4s of activity */
- - if (TIME_AFTER(current_tick, next_backlight_on)) {
- - backlight_on();
- - reset_poweroff_timer();
- - next_backlight_on = current_tick + HZ/4;
- - }
- -
- /* has wheel travelled far enough? */
- if (++count < WHEEL_BASE_SENSITIVITY) {
- return;
- @@ -126,6 +119,13 @@
- /* have a keycode */
- + /* poke backlight every 1/4s of activity */
- + if (TIME_AFTER(current_tick, next_backlight_on)) {
- + backlight_on_by_button(wheel_keycode);
- + reset_poweroff_timer();
- + next_backlight_on = current_tick + HZ/4;
- + }
- +
- usec = USEC_TIMER;
- v = usec - last_wheel_usec;
- diff --git a/firmware/target/arm/ipod/button-mini1g.c b/firmware/target/arm/ipod/button-mini1g.c
- index d4a75c9..d30e1e0 100644
- --- firmware/target/arm/ipod/button-mini1g.c
- +++ firmware/target/arm/ipod/button-mini1g.c
- @@ -91,13 +91,6 @@
- return;
- }
- - /* poke backlight every 1/4s of activity */
- - if (TIME_AFTER(current_tick, next_backlight_on)) {
- - backlight_on();
- - reset_poweroff_timer();
- - next_backlight_on = current_tick + HZ/4;
- - }
- -
- if (++count < WHEEL_BASE_SENSITIVITY)
- return;
- @@ -118,6 +111,13 @@
- /* have a keycode */
- + /* poke backlight every 1/4s of activity */
- + if (TIME_AFTER(current_tick, next_backlight_on)) {
- + backlight_on_by_button(wheel_keycode);
- + reset_poweroff_timer();
- + next_backlight_on = current_tick + HZ/4;
- + }
- +
- usec = USEC_TIMER;
- v = usec - last_wheel_usec;
- diff --git a/firmware/target/arm/sandisk/sansa-e200/button-e200.c b/firmware/target/arm/sandisk/sansa-e200/button-e200.c
- index 1e952b3..cd79023 100644
- --- firmware/target/arm/sandisk/sansa-e200/button-e200.c
- +++ firmware/target/arm/sandisk/sansa-e200/button-e200.c
- @@ -170,7 +170,7 @@
- /* Poke backlight to turn it on or maintain it no more often
- * than every 1/4 second */
- next_backlight_on = current_tick + HZ/4;
- - backlight_on();
- + backlight_on_by_button(keycode);
- #ifdef HAVE_BUTTON_LIGHT
- buttonlight_on();
- #endif
- diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
- index 3ee5e7c..8f50300 100644
- --- firmware/drivers/button.c
- +++ firmware/drivers/button.c
- @@ -41,6 +41,7 @@
- #ifdef HAVE_REMOTE_LCD
- #include "lcd-remote.h"
- #endif
- +#include "debug.h"
- struct event_queue button_queue SHAREDBSS_ATTR;
- @@ -52,6 +53,7 @@
- #endif
- #ifdef HAVE_BACKLIGHT
- static bool filter_first_keypress;
- +static backlight_on_keypress_oracle_func backlight_on_keypress_oracle = NULL;
- #ifdef HAVE_REMOTE_LCD
- static bool remote_filter_first_keypress;
- #endif
- @@ -138,6 +140,28 @@
- return ret;
- }
- +void backlight_on_by_button(int btn)
- +{
- + bool bl_on;
- + if ((backlight_on_keypress_oracle != NULL) && (!is_backlight_on(true)))
- + {
- + bl_on = (*backlight_on_keypress_oracle)(btn);
- + DEBUGF("BL oracle (%d) returned: %d\n", btn, bl_on);
- + }
- + else
- + {
- + bl_on = true;
- + DEBUGF("BL callback is NULL -> bl ON\n");
- + }
- + if (bl_on)
- + {
- + backlight_on();
- +#ifdef HAVE_BUTTON_LIGHT
- + buttonlight_on();
- +#endif
- + }
- +}
- +
- static void button_tick(void)
- {
- static int count = 0;
- @@ -308,10 +332,13 @@
- skip_remote_release = true;
- }
- else
- -#endif
- - if (!filter_first_keypress || is_backlight_on(false)
- +#endif /* HAVE_REMOTE_LCD */
- + if (!filter_first_keypress
- + || is_backlight_on(false)
- + || ((backlight_on_keypress_oracle != NULL)
- + && !(*backlight_on_keypress_oracle)(btn))
- #if BUTTON_REMOTE
- - || (btn & BUTTON_REMOTE)
- + || (btn & BUTTON_REMOTE)
- #endif
- )
- button_try_post(btn, data);
- @@ -327,12 +354,7 @@
- remote_backlight_on();
- else
- #endif
- - {
- - backlight_on();
- -#ifdef HAVE_BUTTON_LIGHT
- - buttonlight_on();
- -#endif
- - }
- + backlight_on_by_button(btn);
- reset_poweroff_timer();
- }
- @@ -447,6 +469,7 @@
- #endif
- #ifdef HAVE_BACKLIGHT
- filter_first_keypress = false;
- + set_backlight_on_keypress_oracle(NULL);
- #ifdef HAVE_REMOTE_LCD
- remote_filter_first_keypress = false;
- #endif
- @@ -558,6 +581,12 @@
- {
- filter_first_keypress = value;
- }
- +
- +void set_backlight_on_keypress_oracle(backlight_on_keypress_oracle_func new_value)
- +{
- + backlight_on_keypress_oracle = new_value;
- +}
- +
- #ifdef HAVE_REMOTE_LCD
- void set_remote_backlight_filter_keypress(bool value)
- {
- diff --git a/firmware/drivers/audio/as3514.c b/firmware/drivers/audio/as3514.c
- index 2260962..d4916ee 100644
- --- firmware/drivers/audio/as3514.c
- +++ firmware/drivers/audio/as3514.c
- @@ -151,9 +151,9 @@
- #ifdef HAVE_AS3543
- as3514_write(AS3514_AUDIOSET1, AUDIOSET1_DAC_on | AUDIOSET1_DAC_GAIN_on);
- - as3514_write(AS3514_AUDIOSET2, AUDIOSET2_AGC_off | AUDIOSET2_HPH_QUALITY_LOW_POWER);
- + as3514_write(AS3514_AUDIOSET2, AUDIOSET2_AGC_off | AUDIOSET2_HPH_QUALITY_HIGH);
- /* common ground on, delay playback unmuting when inserting headphones */
- - as3514_write(AS3514_AUDIOSET3, AUDIOSET3_HPCM_on | AUDIOSET3_HP_LONGSTART);
- + as3514_write(AS3514_AUDIOSET3, AUDIOSET3_HPCM_on | AUDIOSET3_HP_LONGSTART | AUDIOSET3_HP_BIAS_150);
- as3514_write(AS3543_DAC_IF, AS3543_DAC_INT_PLL);
- /* Select Line 2 for FM radio */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement