diff --git a/apps/action.c b/apps/action.c index 15b2d8a4c8..0b21a27ea9 100644 --- a/apps/action.c +++ b/apps/action.c @@ -149,6 +149,27 @@ static inline int get_next_context(const struct button_mapping *items, int i) CONTEXT_STD : items[i].action_code; } + +#if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ) +/* Helper function which is called to boost / unboost CPU. This function + * avoids to increase boost_count with each call of gui_boost(). */ +static void gui_boost(bool want_to_boost) +{ + static bool boosted = false; + + if (want_to_boost && !boosted) + { + cpu_boost(true); + boosted = true; + } + else if (!want_to_boost && boosted) + { + cpu_boost(false); + boosted = false; + } +} +#endif + /* * int get_action_worker(int context, struct button_mapping *user_mappings, int timeout) @@ -183,6 +204,23 @@ static int get_action_worker(int context, int timeout, else button = button_get_w_tmo(timeout); +#if defined(HAVE_GUI_BOOST) && defined(HAVE_ADJUSTABLE_CPU_FREQ) + /* Boost the CPU in case of wheel scrolling activity in the defined contexts. + * Unboost the CPU after timeout. */ + static long last_boost_tick; + if ((button&(BUTTON_SCROLL_BACK|BUTTON_SCROLL_FWD)) && + (context == CONTEXT_STD || context == CONTEXT_LIST || + context == CONTEXT_MAINMENU || context == CONTEXT_TREE)) + { + last_boost_tick = current_tick; + gui_boost(true); + } + else if (TIME_AFTER(current_tick, last_boost_tick + HZ)) + { + gui_boost(false); + } +#endif + /* Data from sys events can be pulled with button_get_data * multimedia button presses don't go through the action system */ if (button == BUTTON_NONE || button & (SYS_EVENT|BUTTON_MULTIMEDIA)) diff --git a/firmware/export/config/ipod1g2g.h b/firmware/export/config/ipod1g2g.h index f4e6c19456..0ce5d45590 100644 --- a/firmware/export/config/ipod1g2g.h +++ b/firmware/export/config/ipod1g2g.h @@ -78,6 +78,9 @@ #define CONFIG_KEYPAD IPOD_1G2G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* define this if the unit uses a scrollwheel for navigation */ #define HAVE_SCROLLWHEEL /* define to activate advanced wheel acceleration code */ diff --git a/firmware/export/config/ipod3g.h b/firmware/export/config/ipod3g.h index ee59a1bc76..e7d8bff53b 100644 --- a/firmware/export/config/ipod3g.h +++ b/firmware/export/config/ipod3g.h @@ -79,6 +79,9 @@ #define CONFIG_KEYPAD IPOD_3G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* define this if the unit uses a scrollwheel for navigation */ #define HAVE_SCROLLWHEEL /* define to activate advanced wheel acceleration code */ diff --git a/firmware/export/config/ipod4g.h b/firmware/export/config/ipod4g.h index 56d0599799..165f5967b4 100644 --- a/firmware/export/config/ipod4g.h +++ b/firmware/export/config/ipod4g.h @@ -79,6 +79,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/ipod6g.h b/firmware/export/config/ipod6g.h index dae9340d5a..0dac46cd8e 100644 --- a/firmware/export/config/ipod6g.h +++ b/firmware/export/config/ipod6g.h @@ -100,6 +100,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + //#define AB_REPEAT_ENABLE //#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE diff --git a/firmware/export/config/ipodcolor.h b/firmware/export/config/ipodcolor.h index ec3d2c6cdf..645e20041c 100644 --- a/firmware/export/config/ipodcolor.h +++ b/firmware/export/config/ipodcolor.h @@ -66,6 +66,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/ipodmini1g.h b/firmware/export/config/ipodmini1g.h index 55b78de752..777dc6f9a2 100644 --- a/firmware/export/config/ipodmini1g.h +++ b/firmware/export/config/ipodmini1g.h @@ -78,6 +78,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + #define HAVE_SCROLLWHEEL /* define to activate advanced wheel acceleration code */ #define HAVE_WHEEL_ACCELERATION diff --git a/firmware/export/config/ipodmini2g.h b/firmware/export/config/ipodmini2g.h index fd332c0a03..c401170459 100644 --- a/firmware/export/config/ipodmini2g.h +++ b/firmware/export/config/ipodmini2g.h @@ -78,6 +78,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/ipodnano1g.h b/firmware/export/config/ipodnano1g.h index 9dba533744..388ba34447 100644 --- a/firmware/export/config/ipodnano1g.h +++ b/firmware/export/config/ipodnano1g.h @@ -69,6 +69,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/ipodnano2g.h b/firmware/export/config/ipodnano2g.h index a85cd61436..37a21b33ba 100644 --- a/firmware/export/config/ipodnano2g.h +++ b/firmware/export/config/ipodnano2g.h @@ -104,6 +104,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + #define AB_REPEAT_ENABLE #define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE diff --git a/firmware/export/config/ipodvideo.h b/firmware/export/config/ipodvideo.h index dd21bb518a..1dd7d48e30 100644 --- a/firmware/export/config/ipodvideo.h +++ b/firmware/export/config/ipodvideo.h @@ -65,6 +65,9 @@ #define CONFIG_KEYPAD IPOD_4G_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/sansae200.h b/firmware/export/config/sansae200.h index a6f4e5416d..dd5747a9ca 100644 --- a/firmware/export/config/sansae200.h +++ b/firmware/export/config/sansae200.h @@ -78,6 +78,9 @@ #define CONFIG_KEYPAD SANSA_E200_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/sansae200v2.h b/firmware/export/config/sansae200v2.h index 03711990a9..34c2cd98ad 100644 --- a/firmware/export/config/sansae200v2.h +++ b/firmware/export/config/sansae200v2.h @@ -76,6 +76,9 @@ /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this if you do software codec */ #define CONFIG_CODEC SWCODEC diff --git a/firmware/export/config/sansafuze.h b/firmware/export/config/sansafuze.h index 2f0073fc53..8563664cb8 100644 --- a/firmware/export/config/sansafuze.h +++ b/firmware/export/config/sansafuze.h @@ -77,6 +77,9 @@ #define CONFIG_KEYPAD SANSA_FUZE_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/sansafuzev2.h b/firmware/export/config/sansafuzev2.h index ff88aa9146..1c0f8a99dc 100644 --- a/firmware/export/config/sansafuzev2.h +++ b/firmware/export/config/sansafuzev2.h @@ -88,6 +88,9 @@ #define CONFIG_KEYPAD SANSA_FUZE_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT diff --git a/firmware/export/config/sansaview.h b/firmware/export/config/sansaview.h index b0317f3e0d..829f67ab3e 100644 --- a/firmware/export/config/sansaview.h +++ b/firmware/export/config/sansaview.h @@ -74,6 +74,9 @@ /* The only difference is that the power/hold is on the left instead of right on Fuze */ #define CONFIG_KEYPAD SANSA_FUZE_PAD +/* Define this to have CPU boosted while scrolling in the UI */ +#define HAVE_GUI_BOOST + /* Define this to enable morse code input */ #define HAVE_MORSE_INPUT