summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-10-15 20:30:29 +0000
committerJens Arnold <amiconn@rockbox.org>2004-10-15 20:30:29 +0000
commit566eae2e119f3c57b1df0782ddcc29fccedbf816 (patch)
treefc8cced8cd199734b2185a20efdfd2ebbcce41bb /firmware/drivers
parent672305f0a1fe8e423904f95d5cb22aea68ff4c62 (diff)
downloadrockbox-566eae2e119f3c57b1df0782ddcc29fccedbf816.zip
rockbox-566eae2e119f3c57b1df0782ddcc29fccedbf816.tar.gz
rockbox-566eae2e119f3c57b1df0782ddcc29fccedbf816.tar.bz2
rockbox-566eae2e119f3c57b1df0782ddcc29fccedbf816.tar.xz
Logarithmic scroll speed setting: speed doubles every 3 steps.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5288 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/lcd-player.c14
-rw-r--r--firmware/drivers/lcd-recorder.c12
2 files changed, 19 insertions, 7 deletions
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c
index 01d7cfd..8dd97ca 100644
--- a/firmware/drivers/lcd-player.c
+++ b/firmware/drivers/lcd-player.c
@@ -88,7 +88,7 @@ struct cursorinfo {
static void scroll_thread(void);
static char scroll_stack[DEFAULT_STACK_SIZE];
static const char scroll_name[] = "scroll";
-static char scroll_speed = 8; /* updates per second */
+static char scroll_ticks = 12; /* # of ticks between updates */
static int scroll_delay = HZ/2; /* delay before starting scroll */
static int jump_scroll_delay = HZ/4; /* delay between jump scroll jumps */
static char scroll_spacing = 3; /* spaces between end and start of text */
@@ -547,7 +547,7 @@ void lcd_puts_scroll(int x, int y, const unsigned char* string )
s->direction=+1;
s->jump_scroll=0;
s->jump_scroll_steps=0;
- if (jump_scroll && jump_scroll_delay<(HZ/scroll_speed)*(s->textlen-11+x)) {
+ if (jump_scroll && jump_scroll_delay<scroll_ticks*(s->textlen-11+x)) {
s->jump_scroll_steps=11-x;
s->jump_scroll=jump_scroll;
}
@@ -593,9 +593,15 @@ void lcd_allow_bidirectional_scrolling(bool on)
allow_bidirectional_scrolling=on;
}
+static const char scroll_tick_table[16] = {
+ /* Hz values:
+ 1, 1.25, 1.55, 2, 2.5, 3.12, 4, 5, 6.25, 8.33, 10, 12.5, 16.7, 20, 25, 33 */
+ 100, 80, 64, 50, 40, 32, 25, 20, 16, 12, 10, 8, 6, 5, 4, 3
+};
+
void lcd_scroll_speed(int speed)
{
- scroll_speed = speed;
+ scroll_ticks = scroll_tick_table[speed];
}
void lcd_scroll_delay(int ms)
@@ -723,7 +729,7 @@ static void scroll_thread(void)
}
}
- sleep(HZ/scroll_speed);
+ sleep(scroll_ticks);
}
}
diff --git a/firmware/drivers/lcd-recorder.c b/firmware/drivers/lcd-recorder.c
index a711a8f..8f8e9f9 100644
--- a/firmware/drivers/lcd-recorder.c
+++ b/firmware/drivers/lcd-recorder.c
@@ -94,7 +94,7 @@ static volatile int scrolling_lines=0; /* Bitpattern of which lines are scrollin
static void scroll_thread(void);
static char scroll_stack[DEFAULT_STACK_SIZE];
static const char scroll_name[] = "scroll";
-static char scroll_speed = 8; /* updates per second */
+static char scroll_ticks = 12; /* # of ticks between updates*/
static int scroll_delay = HZ/2; /* ticks delay before start */
static char scroll_step = 6; /* pixels per scroll step */
static int bidir_limit = 50; /* percent */
@@ -856,9 +856,15 @@ void lcd_stop_scroll(void)
scrolling_lines=0;
}
+static const char scroll_tick_table[16] = {
+ /* Hz values:
+ 1, 1.25, 1.55, 2, 2.5, 3.12, 4, 5, 6.25, 8.33, 10, 12.5, 16.7, 20, 25, 33 */
+ 100, 80, 64, 50, 40, 32, 25, 20, 16, 12, 10, 8, 6, 5, 4, 3
+};
+
void lcd_scroll_speed(int speed)
{
- scroll_speed = speed;
+ scroll_ticks = scroll_tick_table[speed];
}
void lcd_scroll_step(int step)
@@ -933,7 +939,7 @@ static void scroll_thread(void)
lcd_update_rect(xpos, ypos, LCD_WIDTH - xpos, pf->height);
}
- sleep(HZ/scroll_speed);
+ sleep(scroll_ticks);
}
}