Björn Stenberg | d9eb5c7 | 2002-03-28 15:09:10 +0000 | [diff] [blame] | 1 | /*************************************************************************** |
| 2 | * __________ __ ___. |
| 3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ |
| 4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / |
| 5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < |
| 6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ |
| 7 | * \/ \/ \/ \/ \/ |
| 8 | * $Id$ |
| 9 | * |
| 10 | * Copyright (C) 2002 by Alan Korr |
| 11 | * |
| 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. |
| 14 | * |
| 15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| 16 | * KIND, either express or implied. |
| 17 | * |
| 18 | ****************************************************************************/ |
| 19 | |
| 20 | #ifndef __LCD_H__ |
| 21 | #define __LCD_H__ |
| 22 | |
Björn Stenberg | 2382044 | 2002-05-13 12:29:34 +0000 | [diff] [blame] | 23 | #include <stdbool.h> |
Linus Nielsen Feltzing | ba80918 | 2004-10-26 05:40:24 +0000 | [diff] [blame] | 24 | #include "cpu.h" |
Björn Stenberg | 965401a | 2002-04-18 17:42:42 +0000 | [diff] [blame] | 25 | #include "config.h" |
Björn Stenberg | d9eb5c7 | 2002-03-28 15:09:10 +0000 | [diff] [blame] | 26 | |
Linus Nielsen Feltzing | e43b78a | 2003-04-16 00:12:31 +0000 | [diff] [blame] | 27 | #define STYLE_DEFAULT 0 |
| 28 | #define STYLE_INVERT 1 |
| 29 | |
Daniel Stenberg | 22b7701 | 2005-02-22 12:19:12 +0000 | [diff] [blame] | 30 | #ifdef SIMULATOR |
| 31 | #define lcd_icon(x,y) sim_lcd_icon(x,y) |
Linus Nielsen Feltzing | 60e8f4f | 2006-01-25 12:15:25 +0000 | [diff] [blame] | 32 | #ifndef MAX_PATH |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 33 | #define MAX_PATH 260 |
Linus Nielsen Feltzing | 60e8f4f | 2006-01-25 12:15:25 +0000 | [diff] [blame] | 34 | #endif |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 35 | #else |
| 36 | #include "file.h" /* for MAX_PATH; FIXME: Why does this not work for sims? */ |
Daniel Stenberg | 22b7701 | 2005-02-22 12:19:12 +0000 | [diff] [blame] | 37 | #endif |
| 38 | |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 39 | #if LCD_DEPTH <=8 |
| 40 | typedef unsigned char fb_data; |
| 41 | #elif LCD_DEPTH <= 16 |
| 42 | typedef unsigned short fb_data; |
Linus Nielsen Feltzing | 39ecd72 | 2006-02-05 00:17:53 +0000 | [diff] [blame] | 43 | #else |
| 44 | typedef unsigned long fb_data; |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 45 | #endif |
| 46 | |
Björn Stenberg | 29db1a9 | 2002-04-25 15:09:03 +0000 | [diff] [blame] | 47 | /* common functions */ |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 48 | extern void lcd_write_command(int byte); |
| 49 | extern void lcd_write_command_ex(int cmd, int data1, int data2); |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 50 | extern void lcd_write_data(const fb_data* p_bytes, int count); |
Björn Stenberg | 29db1a9 | 2002-04-25 15:09:03 +0000 | [diff] [blame] | 51 | extern void lcd_init(void); |
Thom Johansen | 2fce981 | 2005-11-10 01:08:09 +0000 | [diff] [blame] | 52 | #ifdef SIMULATOR |
| 53 | /* Define a dummy device specific init for the sims */ |
| 54 | #define lcd_init_device() |
| 55 | #else |
| 56 | extern void lcd_init_device(void); |
| 57 | #endif |
Björn Stenberg | 29db1a9 | 2002-04-25 15:09:03 +0000 | [diff] [blame] | 58 | extern void lcd_backlight(bool on); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 59 | extern int lcd_default_contrast(void); |
| 60 | extern void lcd_set_contrast(int val); |
| 61 | |
| 62 | extern void lcd_clear_display(void); |
Jens Arnold | abe77a1 | 2004-08-01 21:50:57 +0000 | [diff] [blame] | 63 | extern void lcd_puts(int x, int y, const unsigned char *string); |
| 64 | extern void lcd_puts_style(int x, int y, const unsigned char *string, int style); |
Kjell Ericson | dd7f294 | 2003-01-10 09:58:04 +0000 | [diff] [blame] | 65 | extern void lcd_putc(int x, int y, unsigned short ch); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 66 | extern void lcd_stop_scroll(void); |
| 67 | extern void lcd_scroll_speed(int speed); |
| 68 | extern void lcd_scroll_delay(int ms); |
| 69 | extern void lcd_puts_scroll(int x, int y, const unsigned char* string); |
Jens Arnold | c76c568 | 2004-08-16 23:37:23 +0000 | [diff] [blame] | 70 | extern void lcd_puts_scroll_style(int x, int y, const unsigned char* string, |
Linus Nielsen Feltzing | e43b78a | 2003-04-16 00:12:31 +0000 | [diff] [blame] | 71 | int style); |
Linus Nielsen Feltzing | cc22cd0 | 2002-07-22 22:37:03 +0000 | [diff] [blame] | 72 | extern void lcd_icon(int icon, bool enable); |
Robert Hak | 5d8e4c2 | 2002-05-21 08:50:46 +0000 | [diff] [blame] | 73 | |
Jens Arnold | c5a309a | 2006-08-08 13:44:43 +0000 | [diff] [blame^] | 74 | #if CONFIG_LCD == LCD_IPODCOLOR || CONFIG_LCD == LCD_IPODNANO \ |
| 75 | || CONFIG_LCD == LCD_H300 |
Dave Chapman | c9d6656 | 2006-08-07 22:11:07 +0000 | [diff] [blame] | 76 | void lcd_yuv_blit(unsigned char * const src[3], |
| 77 | int src_x, int src_y, int stride, |
| 78 | int x, int y, int width, int height); |
| 79 | #endif |
| 80 | |
Daniel Stenberg | 1eea4a5 | 2002-05-24 09:03:08 +0000 | [diff] [blame] | 81 | #if defined(SIMULATOR) || defined(HAVE_LCD_BITMAP) |
Jörg Hohensohn | 56271b5 | 2003-12-12 22:11:08 +0000 | [diff] [blame] | 82 | /* performance function */ |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 83 | extern void lcd_blit(const fb_data* data, int x, int by, int width, |
Jens Arnold | 7e11acb | 2005-06-28 23:15:47 +0000 | [diff] [blame] | 84 | int bheight, int stride); |
Daniel Stenberg | 6985f34 | 2002-08-09 12:20:54 +0000 | [diff] [blame] | 85 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 86 | extern void lcd_update(void); |
Daniel Stenberg | 6985f34 | 2002-08-09 12:20:54 +0000 | [diff] [blame] | 87 | /* update a fraction of the screen */ |
| 88 | extern void lcd_update_rect(int x, int y, int width, int height); |
Daniel Stenberg | ac31e6a | 2005-05-23 16:23:25 +0000 | [diff] [blame] | 89 | |
| 90 | #ifdef HAVE_REMOTE_LCD |
| 91 | extern void lcd_remote_update(void); |
| 92 | /* update a fraction of the screen */ |
| 93 | extern void lcd_remote_update_rect(int x, int y, int width, int height); |
| 94 | #endif |
| 95 | |
Robert Hak | 5d8e4c2 | 2002-05-21 08:50:46 +0000 | [diff] [blame] | 96 | #else |
| 97 | #define lcd_update() |
Daniel Stenberg | 359b695 | 2002-09-10 08:42:03 +0000 | [diff] [blame] | 98 | #define lcd_update_rect(x,y,w,h) |
Robert Hak | 5d8e4c2 | 2002-05-21 08:50:46 +0000 | [diff] [blame] | 99 | #endif |
Björn Stenberg | 29db1a9 | 2002-04-25 15:09:03 +0000 | [diff] [blame] | 100 | |
Daniel Stenberg | a1a2d9e | 2002-04-11 12:35:54 +0000 | [diff] [blame] | 101 | #ifdef HAVE_LCD_CHARCELLS |
Linus Nielsen Feltzing | cc22cd0 | 2002-07-22 22:37:03 +0000 | [diff] [blame] | 102 | |
| 103 | /* Icon definitions for lcd_icon() */ |
| 104 | enum |
| 105 | { |
| 106 | ICON_BATTERY = 0, |
| 107 | ICON_BATTERY_1, |
| 108 | ICON_BATTERY_2, |
| 109 | ICON_BATTERY_3, |
| 110 | ICON_USB, |
| 111 | ICON_PLAY, |
| 112 | ICON_RECORD, |
| 113 | ICON_PAUSE, |
| 114 | ICON_AUDIO, |
| 115 | ICON_REPEAT, |
| 116 | ICON_1, |
| 117 | ICON_VOLUME, |
| 118 | ICON_VOLUME_1, |
| 119 | ICON_VOLUME_2, |
| 120 | ICON_VOLUME_3, |
| 121 | ICON_VOLUME_4, |
| 122 | ICON_VOLUME_5, |
| 123 | ICON_PARAM |
| 124 | }; |
Björn Stenberg | d9eb5c7 | 2002-03-28 15:09:10 +0000 | [diff] [blame] | 125 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 126 | extern void lcd_double_height(bool on); |
| 127 | extern void lcd_define_hw_pattern(int which,const char *pattern,int length); |
| 128 | extern void lcd_define_pattern(int which,const char *pattern); |
Kjell Ericson | a33d6b2 | 2003-01-10 10:12:17 +0000 | [diff] [blame] | 129 | unsigned char lcd_get_locked_pattern(void); |
Kjell Ericson | dd7f294 | 2003-01-10 09:58:04 +0000 | [diff] [blame] | 130 | void lcd_unlock_pattern(unsigned char pat); |
Kjell Ericson | 565505a | 2003-01-27 14:37:03 +0000 | [diff] [blame] | 131 | void lcd_put_cursor(int x, int y, char cursor_char); |
Kjell Ericson | 9d40f7e | 2003-01-29 11:48:35 +0000 | [diff] [blame] | 132 | void lcd_remove_cursor(void); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 133 | extern void lcd_bidir_scroll(int threshold); |
| 134 | #define JUMP_SCROLL_ALWAYS 5 |
| 135 | extern void lcd_jump_scroll(int mode); /* 0=off, 1=once, ..., ALWAYS */ |
| 136 | extern void lcd_jump_scroll_delay(int ms); |
Daniel Stenberg | c8b6119 | 2002-05-04 12:19:36 +0000 | [diff] [blame] | 137 | #endif |
Kjell Ericson | 84d7d70 | 2002-10-17 18:44:02 +0000 | [diff] [blame] | 138 | |
Jens Arnold | a142d4d | 2005-06-30 18:42:24 +0000 | [diff] [blame] | 139 | /* Draw modes */ |
Jens Arnold | 04daef1 | 2005-06-24 22:33:21 +0000 | [diff] [blame] | 140 | #define DRMODE_COMPLEMENT 0 |
| 141 | #define DRMODE_BG 1 |
| 142 | #define DRMODE_FG 2 |
| 143 | #define DRMODE_SOLID 3 |
| 144 | #define DRMODE_INVERSEVID 4 /* used as bit modifier for basic modes */ |
| 145 | |
Jens Arnold | a142d4d | 2005-06-30 18:42:24 +0000 | [diff] [blame] | 146 | /* Low-level drawing function types */ |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 147 | typedef void lcd_pixelfunc_type(int x, int y); |
Jens Arnold | cb36fec | 2006-07-28 07:17:00 +0000 | [diff] [blame] | 148 | typedef void lcd_blockfunc_type(fb_data *address, unsigned mask, unsigned bits); |
Jens Arnold | 1d6eeea | 2005-11-28 10:05:45 +0000 | [diff] [blame] | 149 | #if LCD_DEPTH >= 8 |
| 150 | typedef void lcd_fastpixelfunc_type(fb_data *address); |
| 151 | #endif |
Jens Arnold | a142d4d | 2005-06-30 18:42:24 +0000 | [diff] [blame] | 152 | |
Jens Arnold | 82ea7c3 | 2005-07-19 09:24:29 +0000 | [diff] [blame] | 153 | #ifdef HAVE_LCD_BITMAP |
| 154 | |
| 155 | #ifdef HAVE_LCD_COLOR |
Dave Chapman | 77372d1 | 2005-11-07 23:07:19 +0000 | [diff] [blame] | 156 | #if LCD_DEPTH == 16 |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 157 | #define LCD_MAX_RED 31 |
| 158 | #define LCD_MAX_GREEN 63 |
| 159 | #define LCD_MAX_BLUE 31 |
Dave Chapman | 603f87f | 2006-02-26 02:48:05 +0000 | [diff] [blame] | 160 | #define _RGB_UNPACK_RED(x) ((((x) >> 8) & 0xf8) | ((x) >> 13)) |
| 161 | #define _RGB_UNPACK_GREEN(x) ((((x) >> 3) & 0xfc) | (((x) >> 9) & 0x03)) |
| 162 | #define _RGB_UNPACK_BLUE(x) ((((x) << 3) & 0xf8) | (((x) >> 2) & 0x07)) |
Jens Arnold | e6dac91 | 2006-02-22 21:41:44 +0000 | [diff] [blame] | 163 | #define _RGBPACK(r, g, b) ( ((((r) * (31*257) + (127*257)) >> 16) << 11) \ |
| 164 | |((((g) * (63*257) + (127*257)) >> 16) << 5) \ |
| 165 | | (((b) * (31*257) + (127*257)) >> 16)) |
| 166 | /* Note: ((x * 257) >> 16) almost equals (x / 255), but it avoids the division, |
| 167 | * so it's faster when the macro is used for variable r, g, b in the source. */ |
Dave Chapman | 260f8d3 | 2005-11-19 02:06:46 +0000 | [diff] [blame] | 168 | #if (LCD_PIXELFORMAT == RGB565SWAPPED) |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 169 | #define LCD_RGBPACK(r, g, b) ( ((_RGBPACK((r), (g), (b)) & 0xff00) >> 8) \ |
| 170 | |((_RGBPACK((r), (g), (b)) & 0x00ff) << 8)) |
Dave Chapman | 603f87f | 2006-02-26 02:48:05 +0000 | [diff] [blame] | 171 | #define RGB_UNPACK_RED(x) _RGB_UNPACK_RED(swap16(x)) |
| 172 | #define RGB_UNPACK_GREEN(x) _RGB_UNPACK_GREEN(swap16(x)) |
| 173 | #define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(swap16(x)) |
Dave Chapman | 77372d1 | 2005-11-07 23:07:19 +0000 | [diff] [blame] | 174 | #else |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 175 | #define LCD_RGBPACK(r, g, b) _RGBPACK((r), (g), (b)) |
Dave Chapman | 603f87f | 2006-02-26 02:48:05 +0000 | [diff] [blame] | 176 | #define RGB_UNPACK_RED(x) _RGB_UNPACK_RED(x) |
| 177 | #define RGB_UNPACK_GREEN(x) _RGB_UNPACK_GREEN(x) |
| 178 | #define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(x) |
Dave Chapman | 77372d1 | 2005-11-07 23:07:19 +0000 | [diff] [blame] | 179 | #endif |
Linus Nielsen Feltzing | 39ecd72 | 2006-02-05 00:17:53 +0000 | [diff] [blame] | 180 | #elif LCD_DEPTH == 18 |
| 181 | #define LCD_MAX_RED 63 |
| 182 | #define LCD_MAX_GREEN 63 |
| 183 | #define LCD_MAX_BLUE 63 |
Jens Arnold | e6dac91 | 2006-02-22 21:41:44 +0000 | [diff] [blame] | 184 | #define LCD_RGBPACK(r, g, b) ( ((((r) * (63*257) + (127*257)) >> 16) << 12) \ |
| 185 | |((((g) * (63*257) + (127*257)) >> 16) << 6) \ |
| 186 | | (((b) * (63*257) + (127*257)) >> 16)) |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 187 | #else |
| 188 | /* other colour depths */ |
| 189 | #endif |
| 190 | |
| 191 | #define LCD_BLACK LCD_RGBPACK(0, 0, 0) |
| 192 | #define LCD_DARKGRAY LCD_RGBPACK(85, 85, 85) |
| 193 | #define LCD_LIGHTGRAY LCD_RGBPACK(170, 170, 170) |
| 194 | #define LCD_WHITE LCD_RGBPACK(255, 255, 255) |
| 195 | #define LCD_DEFAULT_FG LCD_BLACK |
| 196 | #define LCD_DEFAULT_BG LCD_RGBPACK(182, 198, 229) /* rockbox blue */ |
| 197 | |
| 198 | #elif LCD_DEPTH > 1 /* greyscale */ |
Jens Arnold | 82ea7c3 | 2005-07-19 09:24:29 +0000 | [diff] [blame] | 199 | #define LCD_MAX_LEVEL ((1 << LCD_DEPTH) - 1) |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 200 | #define LCD_BRIGHTNESS(y) (((y) * LCD_MAX_LEVEL + 127) / 255) |
| 201 | |
| 202 | #define LCD_BLACK LCD_BRIGHTNESS(0) |
| 203 | #define LCD_DARKGRAY LCD_BRIGHTNESS(85) |
| 204 | #define LCD_LIGHTGRAY LCD_BRIGHTNESS(170) |
| 205 | #define LCD_WHITE LCD_BRIGHTNESS(255) |
| 206 | #define LCD_DEFAULT_FG LCD_BLACK |
| 207 | #define LCD_DEFAULT_BG LCD_WHITE |
Jens Arnold | 82ea7c3 | 2005-07-19 09:24:29 +0000 | [diff] [blame] | 208 | #endif |
Jens Arnold | a142d4d | 2005-06-30 18:42:24 +0000 | [diff] [blame] | 209 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 210 | /* Memory copy of display bitmap */ |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 211 | #if LCD_DEPTH == 1 |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 212 | extern fb_data lcd_framebuffer[LCD_HEIGHT/8][LCD_WIDTH]; |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 213 | #elif LCD_DEPTH == 2 |
Dave Chapman | 8ad2df8 | 2006-02-09 00:48:53 +0000 | [diff] [blame] | 214 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING |
Jens Arnold | 19b45a4 | 2006-03-08 01:14:46 +0000 | [diff] [blame] | 215 | #define LCD_FBWIDTH ((LCD_WIDTH+3)/4) |
| 216 | extern fb_data lcd_framebuffer[LCD_HEIGHT][LCD_FBWIDTH]; |
Dave Chapman | 8ad2df8 | 2006-02-09 00:48:53 +0000 | [diff] [blame] | 217 | #else |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 218 | extern fb_data lcd_framebuffer[LCD_HEIGHT/4][LCD_WIDTH]; |
Dave Chapman | 8ad2df8 | 2006-02-09 00:48:53 +0000 | [diff] [blame] | 219 | #endif |
Dave Chapman | 77372d1 | 2005-11-07 23:07:19 +0000 | [diff] [blame] | 220 | #elif LCD_DEPTH == 16 |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 221 | extern fb_data lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH]; |
Linus Nielsen Feltzing | 39ecd72 | 2006-02-05 00:17:53 +0000 | [diff] [blame] | 222 | #elif LCD_DEPTH == 18 |
| 223 | extern fb_data lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH]; |
Jens Arnold | 19b45a4 | 2006-03-08 01:14:46 +0000 | [diff] [blame] | 224 | #endif |
| 225 | |
| 226 | #ifndef LCD_FBWIDTH |
| 227 | #define LCD_FBWIDTH LCD_WIDTH |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 228 | #endif |
Daniel Stenberg | 57e2fb1 | 2002-08-01 13:29:30 +0000 | [diff] [blame] | 229 | |
Dave Chapman | d16a8b8 | 2006-02-05 16:52:22 +0000 | [diff] [blame] | 230 | #if (CONFIG_BACKLIGHT==BL_IRIVER_H300) || (CONFIG_BACKLIGHT==BL_IPOD3G) |
Linus Nielsen Feltzing | 67f0022 | 2005-12-20 23:15:27 +0000 | [diff] [blame] | 231 | extern void lcd_enable(bool on); |
| 232 | #endif |
| 233 | |
Linus Nielsen Feltzing | 745adad | 2006-01-28 12:12:42 +0000 | [diff] [blame] | 234 | /* Bitmap formats */ |
| 235 | enum |
| 236 | { |
| 237 | FORMAT_MONO, |
| 238 | FORMAT_NATIVE, |
| 239 | FORMAT_ANY /* For passing to read_bmp_file() */ |
| 240 | }; |
| 241 | |
Linus Nielsen Feltzing | 281403a | 2006-01-28 23:12:20 +0000 | [diff] [blame] | 242 | #define FORMAT_TRANSPARENT 0x40000000 |
| 243 | |
| 244 | #define TRANSPARENT_COLOR LCD_RGBPACK(255,0,255) |
| 245 | |
Linus Nielsen Feltzing | 745adad | 2006-01-28 12:12:42 +0000 | [diff] [blame] | 246 | struct bitmap { |
| 247 | int width; |
| 248 | int height; |
| 249 | #if LCD_DEPTH > 1 |
| 250 | int format; |
Linus Nielsen Feltzing | 281403a | 2006-01-28 23:12:20 +0000 | [diff] [blame] | 251 | unsigned char *maskdata; |
Linus Nielsen Feltzing | 745adad | 2006-01-28 12:12:42 +0000 | [diff] [blame] | 252 | #endif |
| 253 | unsigned char *data; |
| 254 | }; |
| 255 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 256 | extern void lcd_set_invert_display(bool yesno); |
| 257 | extern void lcd_set_flip(bool yesno); |
| 258 | extern void lcd_roll(int pixels); |
Jens Arnold | 04daef1 | 2005-06-24 22:33:21 +0000 | [diff] [blame] | 259 | |
| 260 | extern void lcd_set_drawmode(int mode); |
| 261 | extern int lcd_get_drawmode(void); |
Björn Stenberg | 71cda11 | 2002-05-10 14:54:56 +0000 | [diff] [blame] | 262 | extern void lcd_setmargins(int xmargin, int ymargin); |
Markus Braun | eef9704 | 2002-08-20 19:33:55 +0000 | [diff] [blame] | 263 | extern int lcd_getxmargin(void); |
| 264 | extern int lcd_getymargin(void); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 265 | extern void lcd_setfont(int font); |
| 266 | extern int lcd_getstringsize(const unsigned char *str, int *w, int *h); |
Jens Arnold | 04daef1 | 2005-06-24 22:33:21 +0000 | [diff] [blame] | 267 | |
Tomas Salfischberger | 7fa39df | 2006-01-22 01:42:05 +0000 | [diff] [blame] | 268 | extern void lcd_puts_offset(int x, int y, const unsigned char *str, int offset); |
| 269 | extern void lcd_puts_style_offset(int x, int y, const unsigned char *str, |
| 270 | int style, int offset); |
| 271 | extern void lcd_puts_scroll_offset(int x, int y, const unsigned char *string, |
| 272 | int offset); |
| 273 | extern void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string, |
| 274 | int style, int offset); |
| 275 | |
Jens Arnold | 576908d | 2005-06-29 01:39:50 +0000 | [diff] [blame] | 276 | /* low level drawing function pointer arrays */ |
Jens Arnold | 71bc504 | 2005-11-06 23:49:29 +0000 | [diff] [blame] | 277 | extern lcd_pixelfunc_type* const lcd_pixelfuncs[8]; |
| 278 | extern lcd_blockfunc_type* const lcd_blockfuncs[8]; |
Jens Arnold | 1d6eeea | 2005-11-28 10:05:45 +0000 | [diff] [blame] | 279 | #if LCD_DEPTH >= 8 |
Jens Arnold | 3c17330 | 2006-02-03 21:11:51 +0000 | [diff] [blame] | 280 | extern lcd_fastpixelfunc_type* const * lcd_fastpixelfuncs; |
Jens Arnold | 1d6eeea | 2005-11-28 10:05:45 +0000 | [diff] [blame] | 281 | #endif |
Jens Arnold | 576908d | 2005-06-29 01:39:50 +0000 | [diff] [blame] | 282 | |
Björn Stenberg | 30e8c03 | 2002-04-25 13:45:23 +0000 | [diff] [blame] | 283 | extern void lcd_drawpixel(int x, int y); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 284 | extern void lcd_drawline(int x1, int y1, int x2, int y2); |
Jens Arnold | 04daef1 | 2005-06-24 22:33:21 +0000 | [diff] [blame] | 285 | extern void lcd_hline(int x1, int x2, int y); |
| 286 | extern void lcd_vline(int x, int y1, int y2); |
| 287 | extern void lcd_drawrect(int x, int y, int width, int height); |
| 288 | extern void lcd_fillrect(int x, int y, int width, int height); |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 289 | extern void lcd_bitmap_part(const fb_data *src, int src_x, int src_y, |
Jens Arnold | 7e11acb | 2005-06-28 23:15:47 +0000 | [diff] [blame] | 290 | int stride, int x, int y, int width, int height); |
Linus Nielsen Feltzing | 0cb4a46 | 2005-11-14 20:43:49 +0000 | [diff] [blame] | 291 | extern void lcd_bitmap(const fb_data *src, int x, int y, int width, |
Jens Arnold | a142d4d | 2005-06-30 18:42:24 +0000 | [diff] [blame] | 292 | int height); |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 293 | extern void lcd_putsxy(int x, int y, const unsigned char *string); |
Jens Arnold | 04daef1 | 2005-06-24 22:33:21 +0000 | [diff] [blame] | 294 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 295 | extern void lcd_invertscroll(int x, int y); |
Björn Stenberg | a2e98c1 | 2002-12-12 15:20:37 +0000 | [diff] [blame] | 296 | extern void lcd_bidir_scroll(int threshold); |
| 297 | extern void lcd_scroll_step(int pixels); |
Björn Stenberg | bed3d3f | 2002-09-20 08:07:51 +0000 | [diff] [blame] | 298 | |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 299 | #if LCD_DEPTH > 1 |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 300 | extern void lcd_set_foreground(unsigned foreground); |
| 301 | extern unsigned lcd_get_foreground(void); |
| 302 | extern void lcd_set_background(unsigned background); |
| 303 | extern unsigned lcd_get_background(void); |
| 304 | extern void lcd_set_drawinfo(int mode, unsigned foreground, |
| 305 | unsigned background); |
Dave Chapman | d9e5b67 | 2006-02-02 20:42:56 +0000 | [diff] [blame] | 306 | #ifdef HAVE_LCD_COLOR |
| 307 | void lcd_set_backdrop(fb_data* backdrop); |
| 308 | fb_data* lcd_get_backdrop(void); |
| 309 | #endif |
Jens Arnold | 5b2cba1 | 2005-11-16 21:09:23 +0000 | [diff] [blame] | 310 | |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 311 | extern void lcd_mono_bitmap_part(const unsigned char *src, int src_x, int src_y, |
| 312 | int stride, int x, int y, int width, int height); |
| 313 | extern void lcd_mono_bitmap(const unsigned char *src, int x, int y, int width, |
Jens Arnold | bf9f28b | 2005-07-14 18:11:36 +0000 | [diff] [blame] | 314 | int height); |
Linus Nielsen Feltzing | 281403a | 2006-01-28 23:12:20 +0000 | [diff] [blame] | 315 | extern void lcd_bitmap_transparent_part(const fb_data *src, |
| 316 | int src_x, int src_y, |
| 317 | int stride, int x, int y, int width, |
| 318 | int height); |
| 319 | extern void lcd_bitmap_transparent(const fb_data *src, int x, int y, |
| 320 | int width, int height); |
Jens Arnold | f894a4c | 2005-07-06 22:58:02 +0000 | [diff] [blame] | 321 | #else /* LCD_DEPTH == 1 */ |
| 322 | #define lcd_mono_bitmap lcd_bitmap |
| 323 | #define lcd_mono_bitmap_part lcd_bitmap_part |
| 324 | #endif |
| 325 | |
Jens Arnold | 82ea7c3 | 2005-07-19 09:24:29 +0000 | [diff] [blame] | 326 | #endif /* HAVE_LCD_BITMAP */ |
Björn Stenberg | d9eb5c7 | 2002-03-28 15:09:10 +0000 | [diff] [blame] | 327 | |
Jens Arnold | 6a556c1 | 2005-06-23 16:53:54 +0000 | [diff] [blame] | 328 | /* internal usage, but in multiple drivers */ |
| 329 | #ifdef HAVE_LCD_BITMAP |
| 330 | #define SCROLL_SPACING 3 |
| 331 | |
| 332 | struct scrollinfo { |
| 333 | char line[MAX_PATH + LCD_WIDTH/2 + SCROLL_SPACING + 2]; |
| 334 | int len; /* length of line in chars */ |
| 335 | int width; /* length of line in pixels */ |
| 336 | int offset; |
| 337 | int startx; |
| 338 | bool backward; /* scroll presently forward or backward? */ |
| 339 | bool bidir; |
| 340 | bool invert; /* invert the scrolled text */ |
| 341 | long start_tick; |
| 342 | }; |
| 343 | #else /* !HAVE_LCD_BITMAP */ |
| 344 | |
| 345 | struct scrollinfo { |
| 346 | int mode; |
| 347 | char text[MAX_PATH]; |
| 348 | int textlen; |
| 349 | int offset; |
| 350 | int turn_offset; |
| 351 | int startx; |
| 352 | int starty; |
| 353 | long scroll_start_tick; |
| 354 | int direction; /* +1 for right or -1 for left*/ |
| 355 | int jump_scroll; |
| 356 | int jump_scroll_steps; |
| 357 | }; |
| 358 | #endif |
| 359 | |
Björn Stenberg | 965401a | 2002-04-18 17:42:42 +0000 | [diff] [blame] | 360 | #endif /* __LCD_H__ */ |