diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/lcd-player.c | 35 | ||||
-rw-r--r-- | firmware/drivers/lcd.h | 1 |
2 files changed, 35 insertions, 1 deletions
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c index 0ca551c63a..a03b1b024c 100644 --- a/firmware/drivers/lcd-player.c +++ b/firmware/drivers/lcd-player.c | |||
@@ -72,6 +72,17 @@ struct scrollinfo { | |||
72 | int direction; /* +1 for right or -1 for left*/ | 72 | int direction; /* +1 for right or -1 for left*/ |
73 | }; | 73 | }; |
74 | 74 | ||
75 | #define MAX_CURSOR_CHARS 8 | ||
76 | struct cursorinfo { | ||
77 | int len; | ||
78 | char text[MAX_CURSOR_CHARS]; | ||
79 | int textpos; | ||
80 | int y_pos; | ||
81 | int x_pos; | ||
82 | int divider; | ||
83 | int downcount; | ||
84 | } cursor; | ||
85 | |||
75 | static void scroll_thread(void); | 86 | static void scroll_thread(void); |
76 | static char scroll_stack[DEFAULT_STACK_SIZE]; | 87 | static char scroll_stack[DEFAULT_STACK_SIZE]; |
77 | static char scroll_name[] = "scroll"; | 88 | static char scroll_name[] = "scroll"; |
@@ -265,6 +276,7 @@ void lcd_clear_display(void) | |||
265 | bool update=false; | 276 | bool update=false; |
266 | DEBUGF("lcd_clear_display()\n"); | 277 | DEBUGF("lcd_clear_display()\n"); |
267 | lcd_stop_scroll(); | 278 | lcd_stop_scroll(); |
279 | cursor.len=0; /* Stop cursor */ | ||
268 | for (i=0;i<22;i++) | 280 | for (i=0;i<22;i++) |
269 | update|=lcdx_putc(i%11, i/11, ' '); | 281 | update|=lcdx_putc(i%11, i/11, ' '); |
270 | if (update) | 282 | if (update) |
@@ -301,6 +313,18 @@ void lcd_puts(int x, int y, unsigned char *string) | |||
301 | return lcd_puts_cont_scroll(x, y, string); | 313 | return lcd_puts_cont_scroll(x, y, string); |
302 | } | 314 | } |
303 | 315 | ||
316 | void lcd_put_cursor(int x, int y, char cursor_char) | ||
317 | { | ||
318 | cursor.text[0]=buffer_xlcd[x][y]; | ||
319 | cursor.text[1]=cursor_char; | ||
320 | cursor.len=2; | ||
321 | cursor.textpos=0; | ||
322 | cursor.y_pos=y; | ||
323 | cursor.x_pos=x; | ||
324 | cursor.downcount=0; | ||
325 | cursor.divider=4; | ||
326 | } | ||
327 | |||
304 | void lcd_putc(int x, int y, unsigned short ch) | 328 | void lcd_putc(int x, int y, unsigned short ch) |
305 | { | 329 | { |
306 | bool update; | 330 | bool update; |
@@ -573,7 +597,16 @@ static void scroll_thread(void) | |||
573 | lcd_puts_cont_scroll(s->startx, s->starty, buffer); | 597 | lcd_puts_cont_scroll(s->startx, s->starty, buffer); |
574 | } | 598 | } |
575 | } | 599 | } |
576 | 600 | if (cursor.len>0) { | |
601 | if (cursor.downcount--<0) { | ||
602 | cursor.downcount=cursor.divider; | ||
603 | cursor.textpos++; | ||
604 | if (cursor.textpos>=cursor.len) | ||
605 | cursor.textpos=0; | ||
606 | update|=lcdx_putc(cursor.x_pos, cursor.y_pos, | ||
607 | cursor.text[cursor.textpos]); | ||
608 | } | ||
609 | } | ||
577 | if (update) { | 610 | if (update) { |
578 | lcd_update(); | 611 | lcd_update(); |
579 | } | 612 | } |
diff --git a/firmware/drivers/lcd.h b/firmware/drivers/lcd.h index 6fe07c1924..b4623c2ae7 100644 --- a/firmware/drivers/lcd.h +++ b/firmware/drivers/lcd.h | |||
@@ -85,6 +85,7 @@ unsigned char lcd_get_locked_pattern(void); | |||
85 | void lcd_unlock_pattern(unsigned char pat); | 85 | void lcd_unlock_pattern(unsigned char pat); |
86 | void lcd_allow_bidirectional_scrolling(bool on); | 86 | void lcd_allow_bidirectional_scrolling(bool on); |
87 | extern void lcd_bidir_scroll(int threshold); | 87 | extern void lcd_bidir_scroll(int threshold); |
88 | void lcd_put_cursor(int x, int y, char cursor_char); | ||
88 | #endif | 89 | #endif |
89 | 90 | ||
90 | #if defined(HAVE_LCD_BITMAP) || defined(SIMULATOR) | 91 | #if defined(HAVE_LCD_BITMAP) || defined(SIMULATOR) |