1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2002 Daniel Stenberg
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 **************************************************************************/
23 #include "lib/fixedpoint.h"
27 #define SS_TITLE "Bouncer"
33 /* variable button definitions */
34 #if CONFIG_KEYPAD == RECORDER_PAD
35 #define BOUNCE_LEFT BUTTON_LEFT
36 #define BOUNCE_RIGHT BUTTON_RIGHT
37 #define BOUNCE_UP BUTTON_UP
38 #define BOUNCE_DOWN BUTTON_DOWN
39 #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
40 #define BOUNCE_MODE (BUTTON_ON | BUTTON_REL)
42 #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
43 #define BOUNCE_LEFT BUTTON_LEFT
44 #define BOUNCE_RIGHT BUTTON_RIGHT
45 #define BOUNCE_UP BUTTON_UP
46 #define BOUNCE_DOWN BUTTON_DOWN
47 #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
48 #define BOUNCE_MODE (BUTTON_ON | BUTTON_REL)
50 #elif CONFIG_KEYPAD == ONDIO_PAD
51 #define BOUNCE_LEFT BUTTON_LEFT
52 #define BOUNCE_RIGHT BUTTON_RIGHT
53 #define BOUNCE_UP BUTTON_UP
54 #define BOUNCE_DOWN BUTTON_DOWN
55 #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
56 #define BOUNCE_MODE (BUTTON_MENU | BUTTON_REL)
58 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
59 (CONFIG_KEYPAD == IRIVER_H300_PAD)
60 #define BOUNCE_LEFT BUTTON_LEFT
61 #define BOUNCE_RIGHT BUTTON_RIGHT
62 #define BOUNCE_UP BUTTON_UP
63 #define BOUNCE_DOWN BUTTON_DOWN
64 #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
65 #define BOUNCE_MODE (BUTTON_SELECT | BUTTON_REL)
67 #define BOUNCE_RC_QUIT (BUTTON_RC_STOP | BUTTON_REL)
69 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
70 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
71 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
72 #define BOUNCE_LEFT BUTTON_LEFT
73 #define BOUNCE_RIGHT BUTTON_RIGHT
74 #define BOUNCE_UP BUTTON_SCROLL_BACK
75 #define BOUNCE_DOWN BUTTON_SCROLL_FWD
76 #define BOUNCE_QUIT (BUTTON_MENU | BUTTON_REL)
77 #define BOUNCE_MODE (BUTTON_SELECT | BUTTON_REL)
79 #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
80 #define BOUNCE_LEFT BUTTON_LEFT
81 #define BOUNCE_RIGHT BUTTON_RIGHT
82 #define BOUNCE_UP BUTTON_UP
83 #define BOUNCE_DOWN BUTTON_DOWN
84 #define BOUNCE_QUIT BUTTON_POWER
85 #define BOUNCE_MODE BUTTON_PLAY
87 #elif (CONFIG_KEYPAD == GIGABEAT_PAD)
88 #define BOUNCE_LEFT BUTTON_LEFT
89 #define BOUNCE_RIGHT BUTTON_RIGHT
90 #define BOUNCE_UP BUTTON_UP
91 #define BOUNCE_DOWN BUTTON_DOWN
92 #define BOUNCE_QUIT BUTTON_POWER
93 #define BOUNCE_MODE BUTTON_A
95 #elif (CONFIG_KEYPAD == SANSA_E200_PAD)
96 #define BOUNCE_LEFT BUTTON_LEFT
97 #define BOUNCE_RIGHT BUTTON_RIGHT
98 #define BOUNCE_UP BUTTON_SCROLL_BACK
99 #define BOUNCE_DOWN BUTTON_SCROLL_FWD
100 #define BOUNCE_QUIT BUTTON_POWER
101 #define BOUNCE_MODE BUTTON_SELECT
103 #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
104 #define BOUNCE_LEFT BUTTON_LEFT
105 #define BOUNCE_RIGHT BUTTON_RIGHT
106 #define BOUNCE_UP BUTTON_SCROLL_BACK
107 #define BOUNCE_DOWN BUTTON_SCROLL_FWD
108 #define BOUNCE_QUIT (BUTTON_HOME|BUTTON_REPEAT)
109 #define BOUNCE_MODE BUTTON_SELECT
111 #elif CONFIG_KEYPAD == SANSA_C200_PAD || \
112 CONFIG_KEYPAD == SANSA_CLIP_PAD || \
113 CONFIG_KEYPAD == SANSA_M200_PAD
114 #define BOUNCE_LEFT BUTTON_LEFT
115 #define BOUNCE_RIGHT BUTTON_RIGHT
116 #define BOUNCE_UP BUTTON_UP
117 #define BOUNCE_DOWN BUTTON_DOWN
118 #define BOUNCE_QUIT BUTTON_POWER
119 #define BOUNCE_MODE BUTTON_SELECT
121 #elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
122 #define BOUNCE_LEFT BUTTON_LEFT
123 #define BOUNCE_RIGHT BUTTON_RIGHT
124 #define BOUNCE_UP BUTTON_SCROLL_UP
125 #define BOUNCE_DOWN BUTTON_SCROLL_DOWN
126 #define BOUNCE_QUIT BUTTON_POWER
127 #define BOUNCE_MODE BUTTON_PLAY
129 #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
130 #define BOUNCE_LEFT BUTTON_LEFT
131 #define BOUNCE_RIGHT BUTTON_RIGHT
132 #define BOUNCE_UP BUTTON_UP
133 #define BOUNCE_DOWN BUTTON_DOWN
134 #define BOUNCE_QUIT BUTTON_BACK
135 #define BOUNCE_MODE BUTTON_MENU
137 #elif (CONFIG_KEYPAD == MROBE100_PAD)
138 #define BOUNCE_LEFT BUTTON_LEFT
139 #define BOUNCE_RIGHT BUTTON_RIGHT
140 #define BOUNCE_UP BUTTON_UP
141 #define BOUNCE_DOWN BUTTON_DOWN
142 #define BOUNCE_QUIT BUTTON_POWER
143 #define BOUNCE_MODE BUTTON_DISPLAY
145 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
146 #define BOUNCE_LEFT BUTTON_RC_REW
147 #define BOUNCE_RIGHT BUTTON_RC_FF
148 #define BOUNCE_UP BUTTON_RC_VOL_UP
149 #define BOUNCE_DOWN BUTTON_RC_VOL_DOWN
150 #define BOUNCE_QUIT BUTTON_RC_REC
151 #define BOUNCE_MODE BUTTON_RC_MODE
153 #elif (CONFIG_KEYPAD == COWON_D2_PAD)
154 #define BOUNCE_QUIT BUTTON_POWER
155 #define BOUNCE_MODE BUTTON_MENU
157 #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
158 #define BOUNCE_LEFT BUTTON_LEFT
159 #define BOUNCE_RIGHT BUTTON_RIGHT
160 #define BOUNCE_UP BUTTON_UP
161 #define BOUNCE_DOWN BUTTON_DOWN
162 #define BOUNCE_QUIT BUTTON_BACK
163 #define BOUNCE_MODE BUTTON_MENU
165 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
166 #define BOUNCE_LEFT BUTTON_LEFT
167 #define BOUNCE_RIGHT BUTTON_RIGHT
168 #define BOUNCE_UP BUTTON_UP
169 #define BOUNCE_DOWN BUTTON_DOWN
170 #define BOUNCE_QUIT BUTTON_POWER
171 #define BOUNCE_MODE BUTTON_MENU
173 #elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD
174 #define BOUNCE_LEFT BUTTON_PREV
175 #define BOUNCE_RIGHT BUTTON_NEXT
176 #define BOUNCE_UP BUTTON_UP
177 #define BOUNCE_DOWN BUTTON_DOWN
178 #define BOUNCE_QUIT BUTTON_POWER
179 #define BOUNCE_MODE BUTTON_MENU
181 #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
182 #define BOUNCE_LEFT BUTTON_PREV
183 #define BOUNCE_RIGHT BUTTON_NEXT
184 #define BOUNCE_UP BUTTON_UP
185 #define BOUNCE_DOWN BUTTON_DOWN
186 #define BOUNCE_QUIT BUTTON_POWER
187 #define BOUNCE_MODE BUTTON_MENU
189 #elif (CONFIG_KEYPAD == ONDAVX747_PAD)
190 #define BOUNCE_QUIT BUTTON_POWER
191 #define BOUNCE_MODE BUTTON_MENU
193 #elif (CONFIG_KEYPAD == ONDAVX777_PAD)
194 #define BOUNCE_QUIT BUTTON_POWER
196 #elif CONFIG_KEYPAD == MROBE500_PAD
197 #define BOUNCE_QUIT BUTTON_POWER
199 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
200 #define BOUNCE_LEFT BUTTON_LEFT
201 #define BOUNCE_RIGHT BUTTON_RIGHT
202 #define BOUNCE_UP BUTTON_UP
203 #define BOUNCE_DOWN BUTTON_DOWN
204 #define BOUNCE_QUIT BUTTON_FFWD
205 #define BOUNCE_MODE BUTTON_PLAY
207 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
208 #define BOUNCE_LEFT BUTTON_PREV
209 #define BOUNCE_RIGHT BUTTON_NEXT
210 #define BOUNCE_UP BUTTON_UP
211 #define BOUNCE_DOWN BUTTON_DOWN
212 #define BOUNCE_QUIT BUTTON_REC
213 #define BOUNCE_MODE BUTTON_MENU
215 #elif CONFIG_KEYPAD == MPIO_HD200_PAD
216 #define BOUNCE_LEFT BUTTON_VOL_DOWN
217 #define BOUNCE_RIGHT BUTTON_VOL_UP
218 #define BOUNCE_UP BUTTON_REW
219 #define BOUNCE_DOWN BUTTON_FF
220 #define BOUNCE_QUIT (BUTTON_REC | BUTTON_PLAY)
221 #define BOUNCE_MODE BUTTON_FUNC
223 #elif CONFIG_KEYPAD == MPIO_HD300_PAD
224 #define BOUNCE_LEFT BUTTON_REW
225 #define BOUNCE_RIGHT BUTTON_FF
226 #define BOUNCE_UP BUTTON_UP
227 #define BOUNCE_DOWN BUTTON_DOWN
228 #define BOUNCE_QUIT (BUTTON_REC | BUTTON_REPEAT)
229 #define BOUNCE_MODE BUTTON_MENU
232 #error No keymap defined!
235 #ifdef HAVE_TOUCHSCREEN
237 #define BOUNCE_LEFT BUTTON_MIDLEFT
240 #define BOUNCE_RIGHT BUTTON_MIDRIGHT
243 #define BOUNCE_UP BUTTON_TOPMIDDLE
246 #define BOUNCE_DOWN BUTTON_BOTTOMMIDDLE
249 #define BOUNCE_QUIT BUTTON_TOPLEFT
252 #define BOUNCE_MODE BUTTON_CENTER
256 #define LETTER_WIDTH 11
257 #define LETTER_HEIGHT 16
259 const unsigned char char_gen_12x16
[][22] =
261 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
262 { 0x00,0x00,0x00,0x7c,0xff,0xff,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x00,0x00 },
263 { 0x00,0x00,0x3c,0x3c,0x00,0x00,0x3c,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
264 { 0x00,0x10,0x90,0xf0,0x7e,0x1e,0x90,0xf0,0x7e,0x1e,0x10,0x02,0x1e,0x1f,0x03,0x02,0x1e,0x1f,0x03,0x02,0x00,0x00 },
265 { 0x00,0x78,0xfc,0xcc,0xff,0xff,0xcc,0xcc,0x88,0x00,0x00,0x00,0x04,0x0c,0x0c,0x3f,0x3f,0x0c,0x0f,0x07,0x00,0x00 },
266 { 0x00,0x38,0x38,0x38,0x00,0x80,0xc0,0xe0,0x70,0x38,0x1c,0x30,0x38,0x1c,0x0e,0x07,0x03,0x01,0x38,0x38,0x38,0x00 },
267 { 0x00,0x00,0xb8,0xfc,0xc6,0xe2,0x3e,0x1c,0x00,0x00,0x00,0x00,0x1f,0x3f,0x31,0x21,0x37,0x1e,0x1c,0x36,0x22,0x00 },
268 { 0x00,0x00,0x00,0x27,0x3f,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
269 { 0x00,0x00,0xf0,0xfc,0xfe,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x0f,0x1f,0x38,0x20,0x20,0x00,0x00,0x00 },
270 { 0x00,0x00,0x01,0x01,0x07,0xfe,0xfc,0xf0,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1f,0x0f,0x03,0x00,0x00,0x00 },
271 { 0x00,0x98,0xb8,0xe0,0xf8,0xf8,0xe0,0xb8,0x98,0x00,0x00,0x00,0x0c,0x0e,0x03,0x0f,0x0f,0x03,0x0e,0x0c,0x00,0x00 },
272 { 0x00,0x80,0x80,0x80,0xf0,0xf0,0x80,0x80,0x80,0x00,0x00,0x00,0x01,0x01,0x01,0x0f,0x0f,0x01,0x01,0x01,0x00,0x00 },
273 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0xf8,0x78,0x00,0x00,0x00,0x00,0x00 },
274 { 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00 },
275 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00 },
276 { 0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0x70,0x38,0x1c,0x0e,0x18,0x1c,0x0e,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00 },
277 { 0xf8,0xfe,0x06,0x03,0x83,0xc3,0x63,0x33,0x1e,0xfe,0xf8,0x07,0x1f,0x1e,0x33,0x31,0x30,0x30,0x30,0x18,0x1f,0x07 },
278 { 0x00,0x00,0x0c,0x0c,0x0e,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x3f,0x3f,0x30,0x30,0x30,0x00 },
279 { 0x1c,0x1e,0x07,0x03,0x03,0x83,0xc3,0xe3,0x77,0x3e,0x1c,0x30,0x38,0x3c,0x3e,0x37,0x33,0x31,0x30,0x30,0x30,0x30 },
280 { 0x0c,0x0e,0x07,0xc3,0xc3,0xc3,0xc3,0xc3,0xe7,0x7e,0x3c,0x0c,0x1c,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1f,0x0e },
281 { 0xc0,0xe0,0x70,0x38,0x1c,0x0e,0x07,0xff,0xff,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3f,0x3f,0x03,0x03 },
282 { 0x3f,0x7f,0x63,0x63,0x63,0x63,0x63,0x63,0xe3,0xc3,0x83,0x0c,0x1c,0x38,0x30,0x30,0x30,0x30,0x30,0x38,0x1f,0x0f },
283 { 0xc0,0xf0,0xf8,0xdc,0xce,0xc7,0xc3,0xc3,0xc3,0x80,0x00,0x0f,0x1f,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1f,0x0f },
284 { 0x03,0x03,0x03,0x03,0x03,0x03,0xc3,0xf3,0x3f,0x0f,0x03,0x00,0x00,0x00,0x30,0x3c,0x0f,0x03,0x00,0x00,0x00,0x00 },
285 { 0x00,0xbc,0xfe,0xe7,0xc3,0xc3,0xc3,0xe7,0xfe,0xbc,0x00,0x0f,0x1f,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1f,0x0f },
286 { 0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xe7,0xfe,0xfc,0x00,0x00,0x30,0x30,0x30,0x38,0x1c,0x0e,0x07,0x03,0x00 },
287 { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x1c,0x1c,0x00,0x00,0x00,0x00,0x00 },
288 { 0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xfc,0x7c,0x00,0x00,0x00,0x00,0x00 },
289 { 0x00,0xc0,0xe0,0xf0,0x38,0x1c,0x0e,0x07,0x03,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0e,0x1c,0x38,0x30,0x00,0x00 },
290 { 0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00 },
291 { 0x00,0x03,0x07,0x0e,0x1c,0x38,0xf0,0xe0,0xc0,0x00,0x00,0x00,0x30,0x38,0x1c,0x0e,0x07,0x03,0x01,0x00,0x00,0x00 },
292 { 0x1c,0x1e,0x07,0x03,0x83,0xc3,0xe3,0x77,0x3e,0x1c,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,0x00,0x00 },
293 { 0xf8,0xfe,0x07,0xf3,0xfb,0x1b,0xfb,0xfb,0x07,0xfe,0xf8,0x0f,0x1f,0x18,0x33,0x37,0x36,0x37,0x37,0x36,0x03,0x01 },
294 { 0x00,0x00,0xe0,0xfc,0x1f,0x1f,0xfc,0xe0,0x00,0x00,0x00,0x38,0x3f,0x07,0x06,0x06,0x06,0x06,0x07,0x3f,0x38,0x00 },
295 { 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xe7,0xfe,0xbc,0x00,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,0x39,0x1f,0x0f,0x00 },
296 { 0xf0,0xfc,0x0e,0x07,0x03,0x03,0x03,0x07,0x0e,0x0c,0x00,0x03,0x0f,0x1c,0x38,0x30,0x30,0x30,0x38,0x1c,0x0c,0x00 },
297 { 0xff,0xff,0x03,0x03,0x03,0x03,0x07,0x0e,0xfc,0xf0,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x38,0x1c,0x0f,0x03,0x00 },
298 { 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x03,0x03,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00 },
299 { 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x03,0x03,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
300 { 0xf0,0xfc,0x0e,0x07,0x03,0xc3,0xc3,0xc3,0xc7,0xc6,0x00,0x03,0x0f,0x1c,0x38,0x30,0x30,0x30,0x30,0x3f,0x3f,0x00 },
301 { 0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xff,0xff,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00 },
302 { 0x00,0x00,0x03,0x03,0xff,0xff,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3f,0x3f,0x30,0x30,0x00,0x00,0x00 },
303 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x0e,0x1e,0x38,0x30,0x30,0x30,0x30,0x38,0x1f,0x07,0x00 },
304 { 0xff,0xff,0xc0,0xe0,0xf0,0x38,0x1c,0x0e,0x07,0x03,0x00,0x3f,0x3f,0x00,0x01,0x03,0x07,0x0e,0x1c,0x38,0x30,0x00 },
305 { 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00 },
306 { 0xff,0xff,0x1e,0x78,0xe0,0xe0,0x78,0x1e,0xff,0xff,0x00,0x3f,0x3f,0x00,0x00,0x01,0x01,0x00,0x00,0x3f,0x3f,0x00 },
307 { 0xff,0xff,0x0e,0x38,0xf0,0xc0,0x00,0x00,0xff,0xff,0x00,0x3f,0x3f,0x00,0x00,0x00,0x03,0x07,0x1c,0x3f,0x3f,0x00 },
308 { 0xf0,0xfc,0x0e,0x07,0x03,0x03,0x07,0x0e,0xfc,0xf0,0x00,0x03,0x0f,0x1c,0x38,0x30,0x30,0x38,0x1c,0x0f,0x03,0x00 },
309 { 0xff,0xff,0x83,0x83,0x83,0x83,0x83,0xc7,0xfe,0x7c,0x00,0x3f,0x3f,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00 },
310 { 0xf0,0xfc,0x0e,0x07,0x03,0x03,0x07,0x0e,0xfc,0xf0,0x00,0x03,0x0f,0x1c,0x38,0x30,0x36,0x3e,0x1c,0x3f,0x33,0x00 },
311 { 0xff,0xff,0x83,0x83,0x83,0x83,0x83,0xc7,0xfe,0x7c,0x00,0x3f,0x3f,0x01,0x01,0x03,0x07,0x0f,0x1d,0x38,0x30,0x00 },
312 { 0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc7,0x8e,0x0c,0x00,0x0c,0x1c,0x38,0x30,0x30,0x30,0x30,0x39,0x1f,0x0f,0x00 },
313 { 0x00,0x03,0x03,0x03,0xff,0xff,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00 },
314 { 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x07,0x1f,0x38,0x30,0x30,0x30,0x30,0x38,0x1f,0x07,0x00 },
315 { 0x07,0x3f,0xf8,0xc0,0x00,0x00,0xc0,0xf8,0x3f,0x07,0x00,0x00,0x00,0x01,0x0f,0x3e,0x3e,0x0f,0x01,0x00,0x00,0x00 },
316 { 0xff,0xff,0x00,0x00,0x80,0x80,0x00,0x00,0xff,0xff,0x00,0x3f,0x3f,0x1c,0x06,0x03,0x03,0x06,0x1c,0x3f,0x3f,0x00 },
317 { 0x03,0x0f,0x1c,0x30,0xe0,0xe0,0x30,0x1c,0x0f,0x03,0x00,0x30,0x3c,0x0e,0x03,0x01,0x01,0x03,0x0e,0x3c,0x30,0x00 },
318 { 0x03,0x0f,0x3c,0xf0,0xc0,0xc0,0xf0,0x3c,0x0f,0x03,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00 },
319 { 0x03,0x03,0x03,0x03,0xc3,0xe3,0x33,0x1f,0x0f,0x03,0x00,0x30,0x3c,0x3e,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00 },
320 { 0x00,0x00,0xff,0xff,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x00,0x00,0x00 },
321 { 0x0e,0x1c,0x38,0x70,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0e,0x1c,0x18 },
322 { 0x00,0x00,0x03,0x03,0x03,0x03,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x3f,0x3f,0x00,0x00,0x00 },
323 { 0x60,0x70,0x38,0x1c,0x0e,0x07,0x0e,0x1c,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
324 { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0 },
325 { 0x00,0x00,0x00,0x00,0x3e,0x7e,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
326 { 0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xe0,0xc0,0x00,0x1c,0x3e,0x33,0x33,0x33,0x33,0x33,0x33,0x3f,0x3f,0x00 },
327 { 0xff,0xff,0xc0,0x60,0x60,0x60,0x60,0xe0,0xc0,0x80,0x00,0x3f,0x3f,0x30,0x30,0x30,0x30,0x30,0x38,0x1f,0x0f,0x00 },
328 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0x60,0x60,0xc0,0x80,0x00,0x0f,0x1f,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00 },
329 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0xe0,0xc0,0xff,0xff,0x00,0x0f,0x1f,0x38,0x30,0x30,0x30,0x30,0x30,0x3f,0x3f,0x00 },
330 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0x60,0x60,0xc0,0x80,0x00,0x0f,0x1f,0x3b,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00 },
331 { 0xc0,0xc0,0xfc,0xfe,0xc7,0xc3,0xc3,0x03,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
332 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x00,0x03,0xc7,0xce,0xcc,0xcc,0xcc,0xcc,0xe6,0x7f,0x3f,0x00 },
333 { 0xff,0xff,0xc0,0x60,0x60,0x60,0xe0,0xc0,0x80,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00 },
334 { 0x00,0x00,0x00,0x60,0xec,0xec,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3f,0x3f,0x30,0x30,0x00,0x00,0x00 },
335 { 0x00,0x00,0x00,0x00,0x00,0x60,0xec,0xec,0x00,0x00,0x00,0x00,0x00,0x60,0xe0,0xc0,0xc0,0xff,0x7f,0x00,0x00,0x00 },
336 { 0x00,0xff,0xff,0x00,0x80,0xc0,0xe0,0x60,0x00,0x00,0x00,0x00,0x3f,0x3f,0x03,0x07,0x0f,0x1c,0x38,0x30,0x00,0x00 },
337 { 0x00,0x00,0x00,0x03,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3f,0x3f,0x30,0x30,0x00,0x00,0x00 },
338 { 0xe0,0xc0,0xe0,0xe0,0xc0,0xc0,0xe0,0xe0,0xc0,0x80,0x00,0x3f,0x3f,0x00,0x00,0x3f,0x3f,0x00,0x00,0x3f,0x3f,0x00 },
339 { 0x00,0xe0,0xe0,0x60,0x60,0x60,0x60,0xe0,0xc0,0x80,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00 },
340 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0x60,0xe0,0xc0,0x80,0x00,0x0f,0x1f,0x38,0x30,0x30,0x30,0x30,0x38,0x1f,0x0f,0x00 },
341 { 0xe0,0xe0,0x60,0x60,0x60,0x60,0x60,0xe0,0xc0,0x80,0x00,0xff,0xff,0x0c,0x18,0x18,0x18,0x18,0x1c,0x0f,0x07,0x00 },
342 { 0x80,0xc0,0xe0,0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x00,0x07,0x0f,0x1c,0x18,0x18,0x18,0x18,0x0c,0xff,0xff,0x00 },
343 { 0x00,0xe0,0xe0,0xc0,0x60,0x60,0x60,0x60,0xe0,0xc0,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
344 { 0xc0,0xe0,0x60,0x60,0x60,0x60,0x60,0x40,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3f,0x1e,0x00,0x00,0x00 },
345 { 0x60,0x60,0xfe,0xfe,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x3f,0x30,0x30,0x30,0x30,0x00,0x00,0x00 },
346 { 0xe0,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0x00,0x0f,0x1f,0x38,0x30,0x30,0x30,0x30,0x18,0x3f,0x3f,0x00 },
347 { 0x60,0xe0,0x80,0x00,0x00,0x00,0x00,0x80,0xe0,0x60,0x00,0x00,0x01,0x07,0x1e,0x38,0x38,0x1e,0x07,0x01,0x00,0x00 },
348 { 0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x00,0x00,0xe0,0xe0,0x00,0x07,0x1f,0x38,0x1c,0x0f,0x0f,0x1c,0x38,0x1f,0x07,0x00 },
349 { 0x60,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0x60,0x00,0x00,0x30,0x38,0x1d,0x0f,0x07,0x0f,0x1d,0x38,0x30,0x00,0x00 },
350 { 0x00,0x60,0xe0,0x80,0x00,0x00,0x80,0xe0,0x60,0x00,0x00,0x00,0x00,0x81,0xe7,0x7e,0x1e,0x07,0x01,0x00,0x00,0x00 },
351 { 0x60,0x60,0x60,0x60,0x60,0xe0,0xe0,0x60,0x20,0x00,0x00,0x30,0x38,0x3c,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00 },
352 { 0x00,0x80,0xc0,0xfc,0x7e,0x07,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x01,0x1f,0x3f,0x70,0x60,0x60,0x60,0x00,0x00 },
353 { 0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x3f,0x00,0x00,0x00,0x00,0x00 },
354 { 0x00,0x03,0x03,0x03,0x07,0x7e,0xfc,0xc0,0x80,0x00,0x00,0x00,0x60,0x60,0x60,0x70,0x3f,0x1f,0x01,0x00,0x00,0x00 },
355 { 0x10,0x18,0x0c,0x04,0x0c,0x18,0x10,0x18,0x0c,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
356 { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00 }
359 static signed char speed
[]={
360 1,2,3,3,3,2,1,0,-1,-2,-2,-2,-1,0,0,1,
363 #if LCD_WIDTH > LCD_HEIGHT /* landscape LCD */
365 #define TABLE_SIZE LCD_HEIGHT
366 #define RADIUS_MINUTE (3*LCD_HEIGHT/8)
367 #define RADIUS_HOUR (LCD_HEIGHT/4)
369 #else /* portrait (or square) LCD */
371 #define TABLE_SIZE LCD_WIDTH
372 #define RADIUS_MINUTE (3*LCD_WIDTH/8)
373 #define RADIUS_HOUR (LCD_WIDTH/4)
375 #endif /* LCD orientation */
377 #define RADIUS_X ((LCD_WIDTH-LETTER_WIDTH)/2)
378 #define RADIUS_Y ((LCD_HEIGHT-LETTER_HEIGHT)/2)
380 #define PHASE_STEP (0xffffffff/TABLE_SIZE)
381 #define PHASE_FRAC (0xffffffff%TABLE_SIZE)
382 #define DIV_X (0x7ffffffe/RADIUS_X+1)
383 #define DIV_Y (0x7ffffffe/RADIUS_Y+1)
385 static int xtable
[TABLE_SIZE
];
386 static int ytable
[TABLE_SIZE
];
388 static void init_tables(void)
397 for (i
= 0; i
< TABLE_SIZE
; i
++) {
398 sin
= fp_sincos(phase
, NULL
);
399 xtable
[i
] = RADIUS_X
+ sin
/ DIV_X
;
400 ytable
[i
] = RADIUS_Y
+ sin
/ DIV_Y
;
404 if (pfrac
>= TABLE_SIZE
) {
427 struct counter values
[]={
438 #define CLOCK_STEP (0xffffffff/60)
439 #define CLOCK_FRAC (0xffffffff%60)
441 #define DIV_MY (0x7ffffffe/RADIUS_MINUTE+1)
442 #define DIV_HY (0x7ffffffe/RADIUS_HOUR+1)
444 #if LCD_WIDTH == 112 && LCD_HEIGHT == 64 /* Archos LCD: non-square pixels */
445 #define DIV_MX (0x7ffffffe/(5*RADIUS_MINUTE/4)+1)
446 #define DIV_HX (0x7ffffffe/(5*RADIUS_HOUR/4)+1)
447 #else /* Square pixels */
448 #define DIV_MX DIV_MY
449 #define DIV_HX DIV_HY
452 static int xminute
[60], yminute
[60];
453 static int xhour
[60], yhour
[60];
455 static void init_clock(void)
464 for (i
= 0; i
< 60; i
++) {
465 sin
= fp_sincos(phase
, &cos
);
466 xminute
[i
] = LCD_WIDTH
/2 + sin
/ DIV_MX
;
467 yminute
[i
] = LCD_HEIGHT
/2 - cos
/ DIV_MY
;
468 xhour
[i
] = LCD_WIDTH
/2 + sin
/ DIV_HX
;
469 yhour
[i
] = LCD_HEIGHT
/2 - cos
/ DIV_HY
;
480 static void addclock(void)
486 struct tm
* current_time
= rb
->get_time();
487 hour
= current_time
->tm_hour
;
488 minute
= current_time
->tm_min
;
490 rb
->lcd_drawline(LCD_WIDTH
/2, LCD_HEIGHT
/2,
491 xminute
[minute
], yminute
[minute
]);
493 hour
= (hour
% 12) * 5 + minute
/ 12;
495 rb
->lcd_drawline(LCD_WIDTH
/2, LCD_HEIGHT
/2, xhour
[hour
], yhour
[hour
]);
498 for(i
= 1; i
< 60; i
+= 3)
499 rb
->lcd_drawline(xminute
[i
], yminute
[i
],
500 xminute
[(i
+1)%60], yminute
[(i
+1)%60]);
502 #endif /* CONFIG_RTC */
505 static const unsigned face_colors
[] =
507 #ifdef HAVE_LCD_COLOR
508 LCD_BLACK
, LCD_RGBPACK(0, 0, 255), LCD_RGBPACK(255, 0, 0)
510 LCD_BLACK
, LCD_LIGHTGRAY
, LCD_DARKGRAY
515 static int scrollit(void)
523 unsigned int textpos
=0;
525 char* rock
="Rockbox! Pure pleasure. Pure fun. Oooh. What fun! ;-) ";
526 unsigned int rocklen
= rb
->strlen(rock
);
532 rb
->lcd_clear_display();
535 b
= rb
->button_get_w_tmo(HZ
/10);
538 #ifdef BOUNCE_RC_QUIT
539 case BOUNCE_RC_QUIT
:
546 if ( rb
->default_event_handler(b
) == SYS_USB_CONNECTED
)
549 rb
->lcd_clear_display();
555 prev_color
= rb
->lcd_get_foreground();
558 for(i
=0, yy
=y
, xx
=x
; xx
< LCD_WIDTH
; i
++) {
559 letter
= rock
[(i
+textpos
) % rocklen
];
561 rb
->lcd_set_foreground(face_colors
[letter
% 3]);
563 rb
->lcd_mono_bitmap(char_gen_12x16
[letter
-0x20],
564 xx
, ytable
[yy
% TABLE_SIZE
],
565 LETTER_WIDTH
, LETTER_HEIGHT
);
570 rb
->lcd_set_foreground(prev_color
);
576 if(x
< -LETTER_WIDTH
) {
586 static int loopit(void)
593 unsigned int ysanke
=0;
594 unsigned int xsanke
=0;
596 char* rock
="ROCKbox";
597 unsigned int rocklen
= rb
->strlen(rock
);
602 rb
->lcd_clear_display();
605 b
= rb
->button_get_w_tmo(HZ
/10);
606 if ( b
== BOUNCE_QUIT
)
609 if ( b
== BOUNCE_MODE
)
612 if ( rb
->default_event_handler(b
) == SYS_USB_CONNECTED
)
615 if ( b
!= BUTTON_NONE
)
618 y
+= speed
[ysanke
&15] + values
[NUM_YADD
].num
;
619 x
+= speed
[xsanke
&15] + values
[NUM_XADD
].num
;
621 rb
->lcd_clear_display();
628 case BOUNCE_LEFT
|BUTTON_REPEAT
:
632 case BOUNCE_RIGHT
|BUTTON_REPEAT
:
636 case BOUNCE_UP
|BUTTON_REPEAT
:
637 if(++show
== NUM_LAST
)
641 case BOUNCE_DOWN
|BUTTON_REPEAT
:
646 rb
->lcd_putsxyf(0, LCD_HEIGHT
- 8, "%s: %d",
647 values
[show
].what
, values
[show
].num
);
652 i
++, yy
+=values
[NUM_YDIST
].num
, xx
+=values
[NUM_XDIST
].num
)
653 rb
->lcd_mono_bitmap(char_gen_12x16
[rock
[i
]-0x20],
654 xtable
[xx
% TABLE_SIZE
],
655 ytable
[yy
% TABLE_SIZE
],
656 LETTER_WIDTH
, LETTER_HEIGHT
);
659 ysanke
+= values
[NUM_YSANKE
].num
;
660 xsanke
+= values
[NUM_XSANKE
].num
;
665 enum plugin_status
plugin_start(const void* parameter
)
668 char *off
= "[Off] to stop";
672 rb
->lcd_setfont(FONT_SYSFIXED
);
673 rb
->lcd_clear_display();
675 /* Get horizontel centering for text */
676 rb
->lcd_getstringsize((unsigned char *)SS_TITLE
, &w
, &h
);
677 rb
->lcd_putsxy((LCD_WIDTH
/2) - w
/ 2, (LCD_HEIGHT
/2) - h
/ 2,
678 (unsigned char *)SS_TITLE
);
680 /* Get horizontel centering for text */
681 rb
->lcd_getstringsize((unsigned char *)off
, &w
, &h
);
682 rb
->lcd_putsxy((LCD_WIDTH
/2) - w
/ 2, LCD_HEIGHT
- 2 * h
,
683 (unsigned char *)off
);
687 rb
->lcd_set_drawmode(DRMODE_FG
);
699 rb
->lcd_set_drawmode(DRMODE_SOLID
);
700 rb
->lcd_setfont(FONT_UI
);
702 return (h
== 0) ? PLUGIN_OK
: PLUGIN_USB_CONNECTED
;