1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2005 by Kevin Ferrare
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
21 #include <lcd-remote.h>
22 #include "backlight.h"
30 #include "screen_access.h"
33 struct screen screens
[NB_SCREENS
];
35 void screen_init(struct screen
* screen
, enum screen_type screen_type
)
39 #ifdef HAVE_REMOTE_LCD
41 screen
->depth
=LCD_REMOTE_DEPTH
;
42 screen
->has_disk_led
=false;
44 #if 1 /* all remote LCDs are bitmapped so far */
45 screen
->width
=LCD_REMOTE_WIDTH
;
46 screen
->height
=LCD_REMOTE_HEIGHT
;
47 screen
->setmargins
=&lcd_remote_setmargins
;
48 screen
->getymargin
=&lcd_remote_getymargin
;
49 screen
->getxmargin
=&lcd_remote_getxmargin
;
50 screen
->setfont
=&lcd_remote_setfont
;
51 screen
->setfont(FONT_UI
);
52 screen
->getstringsize
=&lcd_remote_getstringsize
;
53 screen
->putsxy
=&lcd_remote_putsxy
;
54 screen
->mono_bitmap
=&lcd_remote_mono_bitmap
;
55 screen
->set_drawmode
=&lcd_remote_set_drawmode
;
56 #if LCD_REMOTE_DEPTH > 1
57 screen
->set_background
=&lcd_remote_set_background
;
58 #endif /* LCD_REMOTE_DEPTH > 1 */
59 screen
->update_rect
=&lcd_remote_update_rect
;
60 screen
->fillrect
=&lcd_remote_fillrect
;
61 screen
->drawrect
=&lcd_remote_drawrect
;
62 screen
->drawpixel
=&lcd_remote_drawpixel
;
63 screen
->drawline
=&lcd_remote_drawline
;
64 screen
->vline
=&lcd_remote_vline
;
65 screen
->hline
=&lcd_remote_hline
;
66 screen
->scroll_speed
=&lcd_remote_scroll_speed
;
67 screen
->scroll_delay
=&lcd_remote_scroll_delay
;
68 screen
->scroll_step
=&lcd_remote_scroll_step
;
69 screen
->invertscroll
=&lcd_remote_invertscroll
;
70 #endif /* LCD_REMOTE_DEPTH > 1 */
71 screen
->puts_offset
=&lcd_remote_puts_offset
;
72 screen
->puts_style_offset
=&lcd_remote_puts_style_offset
;
73 screen
->puts_scroll_style
=&lcd_remote_puts_scroll_style
;
74 screen
->puts_scroll_offset
=&lcd_remote_puts_scroll_offset
;
75 screen
->puts_scroll_style_offset
=&lcd_remote_puts_scroll_style_offset
;
77 #if 0 /* no charcell remote LCDs so far */
80 screen
->double_height
=&lcd_remote_double_height
;
81 screen
->putc
=&lcd_remote_putc
;
82 screen
->get_locked_pattern
=&lcd_remote_get_locked_pattern
;
83 screen
->define_pattern
=&lcd_remote_define_pattern
;
85 screen
->icon
=&sim_lcd_remote_icon
;
87 screen
->icon
=&lcd_remote_icon
;
91 screen
->init
=&lcd_remote_init
;
92 screen
->puts_scroll
=&lcd_remote_puts_scroll
;
93 screen
->stop_scroll
=&lcd_remote_stop_scroll
;
94 screen
->clear_display
=&lcd_remote_clear_display
;
95 screen
->update
=&lcd_remote_update
;
96 screen
->puts
=&lcd_remote_puts
;
97 screen
->backlight_on
=&remote_backlight_on
;
98 screen
->backlight_off
=&remote_backlight_off
;
100 #endif /* HAVE_REMOTE_LCD */
104 screen
->depth
=LCD_DEPTH
;
105 #if CONFIG_LED == LED_VIRTUAL
106 screen
->has_disk_led
=false;
107 #elif defined(HAVE_REMOTE_LCD)
108 screen
->has_disk_led
=true;
110 #ifdef HAVE_LCD_BITMAP
111 screen
->width
=LCD_WIDTH
;
112 screen
->height
=LCD_HEIGHT
;
113 screen
->setmargins
=&lcd_setmargins
;
114 screen
->getymargin
=&lcd_getymargin
;
115 screen
->getxmargin
=&lcd_getxmargin
;
116 screen
->setfont
=&lcd_setfont
;
117 screen
->setfont(FONT_UI
);
118 screen
->getstringsize
=&lcd_getstringsize
;
119 screen
->putsxy
=&lcd_putsxy
;
120 screen
->mono_bitmap
=&lcd_mono_bitmap
;
121 screen
->set_drawmode
=&lcd_set_drawmode
;
123 screen
->bitmap
=&lcd_bitmap
;
125 /* No transparency yet for grayscale lcd */
126 screen
->transparent_bitmap
=&lcd_bitmap
;
128 screen
->transparent_bitmap
=&lcd_bitmap_transparent
;
130 screen
->set_background
=&lcd_set_background
;
132 screen
->update_rect
=&lcd_update_rect
;
133 screen
->fillrect
=&lcd_fillrect
;
134 screen
->drawrect
=&lcd_drawrect
;
135 screen
->drawpixel
=&lcd_drawpixel
;
136 screen
->drawline
=&lcd_drawline
;
137 screen
->vline
=&lcd_vline
;
138 screen
->hline
=&lcd_hline
;
139 screen
->scroll_speed
=&lcd_scroll_speed
;
140 screen
->scroll_delay
=&lcd_scroll_delay
;
141 screen
->scroll_step
=&lcd_scroll_step
;
142 screen
->invertscroll
=&lcd_invertscroll
;
143 screen
->puts_offset
=&lcd_puts_offset
;
144 screen
->puts_style_offset
=&lcd_puts_style_offset
;
145 screen
->puts_scroll_style
=&lcd_puts_scroll_offset
;
146 screen
->puts_scroll_offset
=&lcd_puts_scroll_style
;
147 screen
->puts_scroll_style_offset
=&lcd_puts_scroll_style_offset
;
148 #endif /* HAVE_LCD_BITMAP */
150 #ifdef HAVE_LCD_CHARCELLS
151 screen
->width
=11; /* width in characters instead of pixels */
153 screen
->double_height
=&lcd_double_height
;
154 screen
->putc
=&lcd_putc
;
155 screen
->get_locked_pattern
=&lcd_get_locked_pattern
;
156 screen
->define_pattern
=&lcd_define_pattern
;
158 screen
->icon
=&sim_lcd_icon
;
160 screen
->icon
=&lcd_icon
;
162 #endif /* HAVE_LCD_CHARCELLS */
164 screen
->init
=&lcd_init
;
165 screen
->puts_scroll
=&lcd_puts_scroll
;
166 screen
->stop_scroll
=&lcd_stop_scroll
;
167 screen
->clear_display
=&lcd_clear_display
;
168 #if defined(HAVE_LCD_BITMAP) || defined(SIMULATOR)
169 screen
->update
=&lcd_update
;
171 screen
->puts
=&lcd_puts
;
172 screen
->backlight_on
=&backlight_on
;
173 screen
->backlight_off
=&backlight_off
;
176 screen
->screen_type
=screen_type
;
178 screen
->has_buttonbar
=false;
180 gui_textarea_update_nblines(screen
);
183 #ifdef HAVE_LCD_BITMAP
184 void screen_clear_area(struct screen
* display
, int xstart
, int ystart
,
185 int width
, int height
)
187 display
->set_drawmode(DRMODE_SOLID
|DRMODE_INVERSEVID
);
188 display
->fillrect(xstart
, ystart
, width
, height
);
189 display
->set_drawmode(DRMODE_SOLID
);
193 void screen_access_init(void)
197 screen_init(&screens
[i
], i
);