diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 2a54a6d79f..8c551b443d 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -8514,4 +8514,18 @@
*: "Invalid Filename"
-
\ No newline at end of file
+
+
+ id: LANG_REMOTE_SCROLL_SETS
+ desc: "Remote Scrolling Options" Submenu in "Scrolling Options" menu
+ user:
+
+
+ *: "Remote Scrolling Options"
+
+
+ *: "Remote Scrolling Options"
+
+
diff --git a/apps/screen_access.c b/apps/screen_access.c
index 1dc8734462..5e3dfd8505 100644
--- a/apps/screen_access.c
+++ b/apps/screen_access.c
@@ -147,6 +147,8 @@ void screen_init(struct screen * screen, enum screen_type screen_type)
screen->drawline=&lcd_drawline;
screen->vline=&lcd_vline;
screen->hline=&lcd_hline;
+ screen->scroll_speed=&lcd_scroll_speed;
+ screen->scroll_delay=&lcd_scroll_delay;
screen->scroll_step=&lcd_scroll_step;
screen->invertscroll=&lcd_invertscroll;
screen->puts_offset=&lcd_puts_offset;
@@ -173,8 +175,6 @@ void screen_init(struct screen * screen, enum screen_type screen_type)
screen->init=&lcd_init;
screen->puts_scroll=&lcd_puts_scroll;
screen->stop_scroll=&lcd_stop_scroll;
- screen->scroll_speed=&lcd_scroll_speed;
- screen->scroll_delay=&lcd_scroll_delay;
screen->clear_display=&lcd_clear_display;
#if defined(HAVE_LCD_BITMAP) || defined(SIMULATOR)
screen->update=&lcd_update;
@@ -207,26 +207,3 @@ void screen_access_init(void)
FOR_NB_SCREENS(i)
screen_init(&screens[i], i);
}
-
-void screen_lcd_scroll_speed(int speed)
-{
- int i;
- FOR_NB_SCREENS(i)
- screens[i].scroll_speed(speed);
-}
-
-void screen_lcd_scroll_delay(int ms)
-{
- int i;
- FOR_NB_SCREENS(i)
- screens[i].scroll_delay(ms);
-}
-
-#ifdef HAVE_LCD_BITMAP
-void screen_lcd_scroll_step(int pixels)
-{
- int i;
- FOR_NB_SCREENS(i)
- screens[i].scroll_step(pixels);
-}
-#endif
diff --git a/apps/screen_access.h b/apps/screen_access.h
index c739c6cb1f..ae0a962015 100644
--- a/apps/screen_access.h
+++ b/apps/screen_access.h
@@ -185,13 +185,4 @@ extern void screen_access_init(void);
*/
extern struct screen screens[NB_SCREENS];
-
-/*
- * Functions to apply LCD settings across all screens
- */
-void screen_lcd_scroll_speed(int speed);
-void screen_lcd_scroll_delay(int ms);
-void screen_lcd_scroll_step(int pixels);
-
-
#endif /*_SCREEN_ACCESS_H_*/
diff --git a/apps/settings.c b/apps/settings.c
index 1a6b4c3199..8122c58aa8 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -94,7 +94,7 @@ const char rec_base_directory[] = REC_BASE_DIR;
#include "dsp.h"
#endif
-#define CONFIG_BLOCK_VERSION 43
+#define CONFIG_BLOCK_VERSION 44
#define CONFIG_BLOCK_SIZE 512
#define RTC_BLOCK_SIZE 44
@@ -359,6 +359,13 @@ static const struct bit_entry hd_bits[] =
{4, S_O(scroll_speed), 9, "scroll speed", NULL }, /* 0...15 */
{8, S_O(scroll_delay), 100, "scroll delay", NULL }, /* 0...250 */
{8, S_O(bidir_limit), 50, "bidir limit", NULL }, /* 0...200 */
+
+#ifdef HAVE_REMOTE_LCD
+ {4, S_O(remote_scroll_speed), 9, "remote scroll speed", NULL }, /* 0...15 */
+ {8, S_O(remote_scroll_step), 6, "remote scroll step", NULL }, /* 1...160 */
+ {8, S_O(remote_scroll_delay), 100, "remote scroll delay", NULL }, /* 0...250 */
+#endif
+
#ifdef HAVE_LCD_BITMAP
{1, S_O(offset_out_of_view), false, "Screen Scrolls Out Of View", off_on },
#if LCD_WIDTH > 255
@@ -1004,9 +1011,9 @@ void settings_apply(void)
lcd_remote_set_contrast(global_settings.remote_contrast);
lcd_remote_set_invert_display(global_settings.remote_invert);
lcd_remote_set_flip(global_settings.remote_flip_display);
- lcd_remote_scroll_speed(global_settings.scroll_speed);
- lcd_remote_scroll_step(global_settings.scroll_step);
- lcd_remote_scroll_delay(global_settings.scroll_delay * (HZ/10));
+ lcd_remote_scroll_speed(global_settings.remote_scroll_speed);
+ lcd_remote_scroll_step(global_settings.remote_scroll_step);
+ lcd_remote_scroll_delay(global_settings.remote_scroll_delay * (HZ/10));
#ifdef HAVE_REMOTE_LCD_TICKING
lcd_remote_emireduce(global_settings.remote_reduce_ticking);
#endif
diff --git a/apps/settings.h b/apps/settings.h
index fd03d93f43..ca8e88a75b 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -301,7 +301,6 @@ struct user_settings
int volume_type; /* how volume is displayed: 0=graphic, 1=percent */
int battery_display; /* how battery is displayed: 0=graphic, 1=percent */
int timeformat; /* time format: 0=24 hour clock, 1=12 hour clock */
- int scroll_speed; /* long texts scrolling speed: 1-30 */
bool playlist_shuffle;
bool play_selected; /* Plays selected file even in shuffle mode */
int ff_rewind_min_step; /* FF/Rewind minimum step size */
@@ -333,11 +332,18 @@ struct user_settings
int runtime; /* current runtime since last charge */
int topruntime; /* top known runtime */
-
+
+ int scroll_speed; /* long texts scrolling speed: 1-30 */
int bidir_limit; /* bidir scroll length limit */
int scroll_delay; /* delay (in 1/10s) before starting scroll */
int scroll_step; /* pixels to advance per update */
-#ifdef HAVE_LCD_BITMAP
+#ifdef HAVE_REMOTE_LCD
+ int remote_scroll_speed; /* long texts scrolling speed: 1-30 */
+ int remote_scroll_delay; /* delay (in 1/10s) before starting scroll */
+ int remote_scroll_step; /* pixels to advance per update */
+#endif
+
+#ifdef HAVE_LCD_BITMAP
bool offset_out_of_view;
int screen_scroll_step;
#endif
diff --git a/apps/settings_menu.c b/apps/settings_menu.c
index c15eb6cf91..5aa861a88e 100644
--- a/apps/settings_menu.c
+++ b/apps/settings_menu.c
@@ -55,7 +55,6 @@
#include "yesno.h"
#include "list.h"
#include "color_picker.h"
-#include "screen_access.h"
#ifdef HAVE_LCD_BITMAP
#include "peakmeter.h"
@@ -840,10 +839,10 @@ static bool sleep_timer(void)
}
static bool scroll_speed(void)
-{
+{
return set_int(str(LANG_SCROLL), "", UNIT_INT,
&global_settings.scroll_speed,
- &screen_lcd_scroll_speed, 1, 0, 15, NULL );
+ &lcd_scroll_speed, 1, 0, 15, NULL );
}
static bool scroll_delay(void)
@@ -851,11 +850,37 @@ static bool scroll_delay(void)
int dummy = global_settings.scroll_delay * (HZ/10);
int rc = set_int(str(LANG_SCROLL_DELAY), "ms", UNIT_MS,
&dummy,
- &screen_lcd_scroll_delay, 100, 0, 2500, NULL );
+ &lcd_scroll_delay, 100, 0, 2500, NULL );
global_settings.scroll_delay = dummy / (HZ/10);
return rc;
}
+#ifdef HAVE_REMOTE_LCD
+static bool remote_scroll_speed(void)
+{
+ return set_int(str(LANG_SCROLL), "", UNIT_INT,
+ &global_settings.remote_scroll_speed,
+ &lcd_remote_scroll_speed, 1, 0, 15, NULL );
+}
+
+static bool remote_scroll_step(void)
+{
+ return set_int(str(LANG_SCROLL_STEP_EXAMPLE), str(LANG_PIXELS), UNIT_PIXEL,
+ &global_settings.remote_scroll_step,
+ &lcd_remote_scroll_step, 1, 1, LCD_WIDTH, NULL );
+}
+
+static bool remote_scroll_delay(void)
+{
+ int dummy = global_settings.remote_scroll_delay * (HZ/10);
+ int rc = set_int(str(LANG_SCROLL_DELAY), "ms", UNIT_MS,
+ &dummy,
+ &lcd_remote_scroll_delay, 100, 0, 2500, NULL );
+ global_settings.remote_scroll_delay = dummy / (HZ/10);
+ return rc;
+}
+#endif
+
#ifdef HAVE_LCD_BITMAP
static bool screen_scroll(void)
{
@@ -875,7 +900,7 @@ static bool scroll_step(void)
{
return set_int(str(LANG_SCROLL_STEP_EXAMPLE), str(LANG_PIXELS), UNIT_PIXEL,
&global_settings.scroll_step,
- &screen_lcd_scroll_step, 1, 1, LCD_WIDTH, NULL );
+ &lcd_scroll_step, 1, 1, LCD_WIDTH, NULL );
}
#endif
@@ -1645,6 +1670,25 @@ static bool fileview_settings_menu(void)
return result;
}
+#ifdef HAVE_REMOTE_LCD
+static bool remote_scroll_sets(void)
+{
+ int m;
+ bool result;
+
+ static const struct menu_item items[] = {
+ { ID2P(LANG_SCROLL_SPEED), remote_scroll_speed },
+ { ID2P(LANG_SCROLL_DELAY), remote_scroll_delay },
+ { ID2P(LANG_SCROLL_STEP), remote_scroll_step },
+ };
+
+ m=menu_init( items, sizeof(items) / sizeof(*items), NULL,
+ NULL, NULL, NULL);
+ result = menu_run(m);
+ menu_exit(m);
+ return result;
+}
+#endif
static bool scroll_settings_menu(void)
{
@@ -1656,6 +1700,9 @@ static bool scroll_settings_menu(void)
{ ID2P(LANG_SCROLL_DELAY), scroll_delay },
#ifdef HAVE_LCD_BITMAP
{ ID2P(LANG_SCROLL_STEP), scroll_step },
+#endif
+#ifdef HAVE_REMOTE_LCD
+ { ID2P(LANG_REMOTE_SCROLL_SETS), remote_scroll_sets },
#endif
{ ID2P(LANG_BIDIR_SCROLL), bidir_limit },
#ifdef HAVE_LCD_CHARCELLS