summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/lcd-2bit-horz.c53
-rw-r--r--firmware/drivers/lcd-ipod.c13
-rw-r--r--firmware/drivers/power.c2
3 files changed, 51 insertions, 17 deletions
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c
index 01f5d93cf3..de1af90213 100644
--- a/firmware/drivers/lcd-2bit-horz.c
+++ b/firmware/drivers/lcd-2bit-horz.c
@@ -610,8 +610,27 @@ void lcd_putsxy(int x, int y, const unsigned char *str)
610 610
611/*** line oriented text output ***/ 611/*** line oriented text output ***/
612 612
613/* put a string at a given char position */
614void lcd_puts(int x, int y, const unsigned char *str)
615{
616 lcd_puts_style_offset(x, y, str, STYLE_DEFAULT, 0);
617}
618
613void lcd_puts_style(int x, int y, const unsigned char *str, int style) 619void lcd_puts_style(int x, int y, const unsigned char *str, int style)
614{ 620{
621 lcd_puts_style_offset(x, y, str, style, 0);
622}
623
624void lcd_puts_offset(int x, int y, const unsigned char *str, int offset)
625{
626 lcd_puts_style_offset(x, y, str, STYLE_DEFAULT, offset);
627}
628
629/* put a string at a given char position, style, and pixel position,
630 * skipping first offset pixel columns */
631void lcd_puts_style_offset(int x, int y, const unsigned char *str,
632 int style, int offset)
633{
615 int xpos,ypos,w,h; 634 int xpos,ypos,w,h;
616 int lastmode = drawmode; 635 int lastmode = drawmode;
617 636
@@ -624,23 +643,14 @@ void lcd_puts_style(int x, int y, const unsigned char *str, int style)
624 lcd_getstringsize(str, &w, &h); 643 lcd_getstringsize(str, &w, &h);
625 xpos = xmargin + x*w / utf8length((char *)str); 644 xpos = xmargin + x*w / utf8length((char *)str);
626 ypos = ymargin + y*h; 645 ypos = ymargin + y*h;
627 lcd_putsxy(xpos, ypos, str); 646 drawmode = (style & STYLE_INVERT) ?
628 drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID); 647 (DRMODE_SOLID|DRMODE_INVERSEVID) : DRMODE_SOLID;
648 lcd_putsxyofs(xpos, ypos, offset, str);
649 drawmode ^= DRMODE_INVERSEVID;
629 lcd_fillrect(xpos + w, ypos, LCD_WIDTH - (xpos + w), h); 650 lcd_fillrect(xpos + w, ypos, LCD_WIDTH - (xpos + w), h);
630 if (style & STYLE_INVERT)
631 {
632 drawmode = DRMODE_COMPLEMENT;
633 lcd_fillrect(xpos, ypos, LCD_WIDTH - xpos, h);
634 }
635 drawmode = lastmode; 651 drawmode = lastmode;
636} 652}
637 653
638/* put a string at a given char position */
639void lcd_puts(int x, int y, const unsigned char *str)
640{
641 lcd_puts_style(x, y, str, STYLE_DEFAULT);
642}
643
644/*** scrolling ***/ 654/*** scrolling ***/
645 655
646/* Reverse the invert setting of the scrolling line (if any) at given char 656/* Reverse the invert setting of the scrolling line (if any) at given char
@@ -687,6 +697,17 @@ void lcd_puts_scroll(int x, int y, const unsigned char *string)
687 697
688void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style) 698void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
689{ 699{
700 lcd_puts_scroll_style_offset(x, y, string, style, 0);
701}
702
703void lcd_puts_scroll_offset(int x, int y, const unsigned char *string, int offset)
704{
705 lcd_puts_scroll_style_offset(x, y, string, STYLE_DEFAULT, offset);
706}
707
708void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string,
709 int style, int offset)
710{
690 struct scrollinfo* s; 711 struct scrollinfo* s;
691 int w, h; 712 int w, h;
692 713
@@ -696,10 +717,10 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
696 s->invert = false; 717 s->invert = false;
697 if (style & STYLE_INVERT) { 718 if (style & STYLE_INVERT) {
698 s->invert = true; 719 s->invert = true;
699 lcd_puts_style(x,y,string,STYLE_INVERT); 720 lcd_puts_style_offset(x,y,string,STYLE_INVERT,offset);
700 } 721 }
701 else 722 else
702 lcd_puts(x,y,string); 723 lcd_puts_offset(x,y,string,offset);
703 724
704 lcd_getstringsize(string, &w, &h); 725 lcd_getstringsize(string, &w, &h);
705 726
@@ -732,7 +753,7 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
732 strncpy(end, (char *)string, LCD_WIDTH/2); 753 strncpy(end, (char *)string, LCD_WIDTH/2);
733 754
734 s->len = utf8length((char *)string); 755 s->len = utf8length((char *)string);
735 s->offset = 0; 756 s->offset = offset;
736 s->startx = x; 757 s->startx = x;
737 s->backward = false; 758 s->backward = false;
738 scrolling_lines |= (1<<y); 759 scrolling_lines |= (1<<y);
diff --git a/firmware/drivers/lcd-ipod.c b/firmware/drivers/lcd-ipod.c
index 2d165551e6..529509f4d8 100644
--- a/firmware/drivers/lcd-ipod.c
+++ b/firmware/drivers/lcd-ipod.c
@@ -156,6 +156,19 @@ void lcd_set_contrast(int val)
156 lcd_contrast = val; 156 lcd_contrast = val;
157} 157}
158 158
159void lcd_set_invert_display(bool yesno)
160{
161 /* TODO: Implement lcd_set_invert_display() */
162 (void)yesno;
163}
164
165/* turn the display upside down (call lcd_update() afterwards) */
166void lcd_set_flip(bool yesno)
167{
168 /* TODO: Implement lcd_set_flip() */
169 (void)yesno;
170}
171
159void lcd_update_rect(int x, int y, int width, int height) 172void lcd_update_rect(int x, int y, int width, int height)
160{ 173{
161 int cursor_pos, xx; 174 int cursor_pos, xx;
diff --git a/firmware/drivers/power.c b/firmware/drivers/power.c
index 2150040dd6..5feece67f0 100644
--- a/firmware/drivers/power.c
+++ b/firmware/drivers/power.c
@@ -273,7 +273,7 @@ void power_off(void)
273 and_l(~0x00080000, &GPIO1_OUT); 273 and_l(~0x00080000, &GPIO1_OUT);
274#elif defined(IAUDIO_X5) 274#elif defined(IAUDIO_X5)
275 and_l(~0x00000008, &GPIO_OUT); 275 and_l(~0x00000008, &GPIO_OUT);
276#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5002) 276#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
277#ifndef BOOTLOADER 277#ifndef BOOTLOADER
278 /* We don't turn off the ipod, we put it in a deep sleep */ 278 /* We don't turn off the ipod, we put it in a deep sleep */
279 pcf50605_standby_mode(); 279 pcf50605_standby_mode();