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
->mono_bitmap_part
=&lcd_remote_mono_bitmap_part
;
56 screen
->set_drawmode
=&lcd_remote_set_drawmode
;
57 #if LCD_REMOTE_DEPTH > 1
58 screen
->get_background
=&lcd_remote_get_background
;
59 screen
->get_foreground
=&lcd_remote_get_foreground
;
60 screen
->set_background
=&lcd_remote_set_background
;
61 screen
->set_foreground
=&lcd_remote_set_foreground
;
62 #endif /* LCD_REMOTE_DEPTH > 1 */
63 screen
->update_rect
=&lcd_remote_update_rect
;
64 screen
->fillrect
=&lcd_remote_fillrect
;
65 screen
->drawrect
=&lcd_remote_drawrect
;
66 screen
->drawpixel
=&lcd_remote_drawpixel
;
67 screen
->drawline
=&lcd_remote_drawline
;
68 screen
->vline
=&lcd_remote_vline
;
69 screen
->hline
=&lcd_remote_hline
;
70 screen
->scroll_speed
=&lcd_remote_scroll_speed
;
71 screen
->scroll_delay
=&lcd_remote_scroll_delay
;
72 screen
->scroll_step
=&lcd_remote_scroll_step
;
73 screen
->invertscroll
=&lcd_remote_invertscroll
;
74 #endif /* LCD_REMOTE_DEPTH > 1 */
75 screen
->puts_offset
=&lcd_remote_puts_offset
;
76 screen
->puts_style_offset
=&lcd_remote_puts_style_offset
;
77 screen
->puts_scroll_style
=&lcd_remote_puts_scroll_style
;
78 screen
->puts_scroll_offset
=&lcd_remote_puts_scroll_offset
;
79 screen
->puts_scroll_style_offset
=&lcd_remote_puts_scroll_style_offset
;
81 #if 0 /* no charcell remote LCDs so far */
84 screen
->double_height
=&lcd_remote_double_height
;
85 screen
->putc
=&lcd_remote_putc
;
86 screen
->get_locked_pattern
=&lcd_remote_get_locked_pattern
;
87 screen
->define_pattern
=&lcd_remote_define_pattern
;
89 screen
->icon
=&sim_lcd_remote_icon
;
91 screen
->icon
=&lcd_remote_icon
;
95 screen
->init
=&lcd_remote_init
;
96 screen
->puts_scroll
=&lcd_remote_puts_scroll
;
97 screen
->stop_scroll
=&lcd_remote_stop_scroll
;
98 screen
->clear_display
=&lcd_remote_clear_display
;
99 screen
->update
=&lcd_remote_update
;
100 screen
->puts
=&lcd_remote_puts
;
101 screen
->backlight_on
=&remote_backlight_on
;
102 screen
->backlight_off
=&remote_backlight_off
;
104 #endif /* HAVE_REMOTE_LCD */
108 screen
->depth
=LCD_DEPTH
;
109 #if CONFIG_LED == LED_VIRTUAL
110 screen
->has_disk_led
=false;
111 #elif defined(HAVE_REMOTE_LCD)
112 screen
->has_disk_led
=true;
114 #ifdef HAVE_LCD_BITMAP
115 screen
->width
=LCD_WIDTH
;
116 screen
->height
=LCD_HEIGHT
;
117 screen
->setmargins
=&lcd_setmargins
;
118 screen
->getymargin
=&lcd_getymargin
;
119 screen
->getxmargin
=&lcd_getxmargin
;
120 screen
->setfont
=&lcd_setfont
;
121 screen
->setfont(FONT_UI
);
122 screen
->getstringsize
=&lcd_getstringsize
;
123 screen
->putsxy
=&lcd_putsxy
;
124 screen
->mono_bitmap
=&lcd_mono_bitmap
;
125 screen
->mono_bitmap_part
=&lcd_mono_bitmap_part
;
126 screen
->set_drawmode
=&lcd_set_drawmode
;
128 screen
->bitmap
=&lcd_bitmap
;
129 screen
->bitmap_part
=&lcd_bitmap_part
;
131 /* No transparency yet for grayscale lcd */
132 screen
->transparent_bitmap
=&lcd_bitmap
;
133 screen
->transparent_bitmap_part
=&lcd_bitmap_part
;
135 screen
->transparent_bitmap
=&lcd_bitmap_transparent
;
136 screen
->transparent_bitmap_part
=&lcd_bitmap_transparent_part
;
138 screen
->get_background
=&lcd_get_background
;
139 screen
->get_foreground
=&lcd_get_foreground
;
140 screen
->set_background
=&lcd_set_background
;
141 screen
->set_foreground
=&lcd_set_foreground
;
143 screen
->update_rect
=&lcd_update_rect
;
144 screen
->fillrect
=&lcd_fillrect
;
145 screen
->drawrect
=&lcd_drawrect
;
146 screen
->drawpixel
=&lcd_drawpixel
;
147 screen
->drawline
=&lcd_drawline
;
148 screen
->vline
=&lcd_vline
;
149 screen
->hline
=&lcd_hline
;
150 screen
->scroll_speed
=&lcd_scroll_speed
;
151 screen
->scroll_delay
=&lcd_scroll_delay
;
152 screen
->scroll_step
=&lcd_scroll_step
;
153 screen
->invertscroll
=&lcd_invertscroll
;
154 screen
->puts_offset
=&lcd_puts_offset
;
155 screen
->puts_style_offset
=&lcd_puts_style_offset
;
156 screen
->puts_scroll_style
=&lcd_puts_scroll_style
;
157 screen
->puts_scroll_offset
=&lcd_puts_scroll_offset
;
158 screen
->puts_scroll_style_offset
=&lcd_puts_scroll_style_offset
;
159 #endif /* HAVE_LCD_BITMAP */
161 #ifdef HAVE_LCD_CHARCELLS
162 screen
->width
=11; /* width in characters instead of pixels */
164 screen
->double_height
=&lcd_double_height
;
165 screen
->putc
=&lcd_putc
;
166 screen
->get_locked_pattern
=&lcd_get_locked_pattern
;
167 screen
->define_pattern
=&lcd_define_pattern
;
169 screen
->icon
=&sim_lcd_icon
;
171 screen
->icon
=&lcd_icon
;
173 #endif /* HAVE_LCD_CHARCELLS */
175 screen
->init
=&lcd_init
;
176 screen
->puts_scroll
=&lcd_puts_scroll
;
177 screen
->stop_scroll
=&lcd_stop_scroll
;
178 screen
->clear_display
=&lcd_clear_display
;
179 #if defined(HAVE_LCD_BITMAP) || defined(SIMULATOR)
180 screen
->update
=&lcd_update
;
182 screen
->puts
=&lcd_puts
;
183 screen
->backlight_on
=&backlight_on
;
184 screen
->backlight_off
=&backlight_off
;
187 screen
->screen_type
=screen_type
;
189 screen
->has_buttonbar
=false;
191 gui_textarea_update_nblines(screen
);
194 #ifdef HAVE_LCD_BITMAP
195 void screen_clear_area(struct screen
* display
, int xstart
, int ystart
,
196 int width
, int height
)
198 display
->set_drawmode(DRMODE_SOLID
|DRMODE_INVERSEVID
);
199 display
->fillrect(xstart
, ystart
, width
, height
);
200 display
->set_drawmode(DRMODE_SOLID
);
204 void screen_access_init(void)
208 screen_init(&screens
[i
], i
);