diff options
Diffstat (limited to 'apps/gui/gwps.h')
-rw-r--r-- | apps/gui/gwps.h | 351 |
1 files changed, 351 insertions, 0 deletions
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h new file mode 100644 index 0000000000..b5fddd556f --- /dev/null +++ b/apps/gui/gwps.h | |||
@@ -0,0 +1,351 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2002 Jerome Kuptz | ||
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 | #ifndef _WPS_H | ||
20 | #define _WPS_H | ||
21 | |||
22 | #include "screen_access.h" | ||
23 | #include "id3.h" | ||
24 | #include "playlist.h" | ||
25 | |||
26 | |||
27 | /* button definitions */ | ||
28 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
29 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
30 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
31 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
32 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
33 | #define WPS_PREV_PRE BUTTON_LEFT | ||
34 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
35 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
36 | #define WPS_INCVOL BUTTON_UP | ||
37 | #define WPS_DECVOL BUTTON_DOWN | ||
38 | #define WPS_PAUSE (BUTTON_ON | BUTTON_REL) | ||
39 | #define WPS_PAUSE_PRE BUTTON_ON | ||
40 | #define WPS_MENU (BUTTON_MODE | BUTTON_REL) | ||
41 | #define WPS_MENU_PRE BUTTON_MODE | ||
42 | #define WPS_BROWSE (BUTTON_SELECT | BUTTON_REL) | ||
43 | #define WPS_BROWSE_PRE BUTTON_SELECT | ||
44 | #define WPS_EXIT (BUTTON_OFF | BUTTON_REL) | ||
45 | #define WPS_EXIT_PRE BUTTON_OFF | ||
46 | #define WPS_ID3 (BUTTON_MODE | BUTTON_ON) | ||
47 | #define WPS_CONTEXT (BUTTON_SELECT | BUTTON_REPEAT) | ||
48 | #define WPS_QUICK (BUTTON_MODE | BUTTON_REPEAT) | ||
49 | #define WPS_NEXT_DIR (BUTTON_RIGHT | BUTTON_ON) | ||
50 | #define WPS_PREV_DIR (BUTTON_LEFT | BUTTON_ON) | ||
51 | |||
52 | #define WPS_RC_NEXT_DIR (BUTTON_RC_BITRATE | BUTTON_REL) | ||
53 | #define WPS_RC_PREV_DIR (BUTTON_RC_SOURCE | BUTTON_REL) | ||
54 | #define WPS_RC_NEXT (BUTTON_RC_FF | BUTTON_REL) | ||
55 | #define WPS_RC_NEXT_PRE BUTTON_RC_FF | ||
56 | #define WPS_RC_PREV (BUTTON_RC_REW | BUTTON_REL) | ||
57 | #define WPS_RC_PREV_PRE BUTTON_RC_REW | ||
58 | #define WPS_RC_FFWD (BUTTON_RC_FF | BUTTON_REPEAT) | ||
59 | #define WPS_RC_REW (BUTTON_RC_REW | BUTTON_REPEAT) | ||
60 | #define WPS_RC_PAUSE BUTTON_RC_ON | ||
61 | #define WPS_RC_INCVOL BUTTON_RC_VOL_UP | ||
62 | #define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN | ||
63 | #define WPS_RC_EXIT (BUTTON_RC_STOP | BUTTON_REL) | ||
64 | #define WPS_RC_EXIT_PRE BUTTON_RC_STOP | ||
65 | #define WPS_RC_MENU (BUTTON_RC_MODE | BUTTON_REL) | ||
66 | #define WPS_RC_MENU_PRE BUTTON_RC_MODE | ||
67 | #define WPS_RC_BROWSE (BUTTON_RC_MENU | BUTTON_REL) | ||
68 | #define WPS_RC_BROWSE_PRE BUTTON_RC_MENU | ||
69 | #define WPS_RC_CONTEXT (BUTTON_RC_MENU | BUTTON_REPEAT) | ||
70 | |||
71 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
72 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
73 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
74 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
75 | #define WPS_PREV_PRE BUTTON_LEFT | ||
76 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
77 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
78 | #define WPS_INCVOL BUTTON_UP | ||
79 | #define WPS_DECVOL BUTTON_DOWN | ||
80 | #define WPS_PAUSE_PRE BUTTON_PLAY | ||
81 | #define WPS_PAUSE (BUTTON_PLAY | BUTTON_REL) | ||
82 | #define WPS_MENU (BUTTON_F1 | BUTTON_REL) | ||
83 | #define WPS_MENU_PRE BUTTON_F1 | ||
84 | #define WPS_BROWSE (BUTTON_ON | BUTTON_REL) | ||
85 | #define WPS_BROWSE_PRE BUTTON_ON | ||
86 | #define WPS_EXIT BUTTON_OFF | ||
87 | #define WPS_KEYLOCK (BUTTON_F1 | BUTTON_DOWN) | ||
88 | #define WPS_ID3 (BUTTON_F1 | BUTTON_ON) | ||
89 | #define WPS_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT) | ||
90 | #define WPS_QUICK BUTTON_F2 | ||
91 | |||
92 | #ifdef AB_REPEAT_ENABLE | ||
93 | #define WPS_AB_SET_A_MARKER (BUTTON_ON | BUTTON_LEFT) | ||
94 | #define WPS_AB_SET_B_MARKER (BUTTON_ON | BUTTON_RIGHT) | ||
95 | #define WPS_AB_RESET_AB_MARKERS (BUTTON_ON | BUTTON_OFF) | ||
96 | #endif | ||
97 | |||
98 | #define WPS_RC_NEXT BUTTON_RC_RIGHT | ||
99 | #define WPS_RC_PREV BUTTON_RC_LEFT | ||
100 | #define WPS_RC_PAUSE BUTTON_RC_PLAY | ||
101 | #define WPS_RC_INCVOL BUTTON_RC_VOL_UP | ||
102 | #define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN | ||
103 | #define WPS_RC_EXIT BUTTON_RC_STOP | ||
104 | |||
105 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
106 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
107 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
108 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
109 | #define WPS_PREV_PRE BUTTON_LEFT | ||
110 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
111 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
112 | #define WPS_INCVOL (BUTTON_MENU | BUTTON_RIGHT) | ||
113 | #define WPS_DECVOL (BUTTON_MENU | BUTTON_LEFT) | ||
114 | #define WPS_PAUSE_PRE BUTTON_PLAY | ||
115 | #define WPS_PAUSE (BUTTON_PLAY | BUTTON_REL) | ||
116 | #define WPS_MENU (BUTTON_MENU | BUTTON_REL) | ||
117 | #define WPS_MENU_PRE BUTTON_MENU | ||
118 | #define WPS_BROWSE (BUTTON_ON | BUTTON_REL) | ||
119 | #define WPS_BROWSE_PRE BUTTON_ON | ||
120 | #define WPS_EXIT BUTTON_STOP | ||
121 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_STOP) | ||
122 | #define WPS_ID3 (BUTTON_MENU | BUTTON_ON) | ||
123 | #define WPS_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT) | ||
124 | |||
125 | #ifdef AB_REPEAT_ENABLE | ||
126 | #define WPS_AB_SET_A_MARKER (BUTTON_ON | BUTTON_LEFT) | ||
127 | #define WPS_AB_SET_B_MARKER (BUTTON_ON | BUTTON_RIGHT) | ||
128 | #define WPS_AB_RESET_AB_MARKERS (BUTTON_ON | BUTTON_STOP) | ||
129 | #endif | ||
130 | |||
131 | #define WPS_RC_NEXT BUTTON_RC_RIGHT | ||
132 | #define WPS_RC_PREV BUTTON_RC_LEFT | ||
133 | #define WPS_RC_PAUSE BUTTON_RC_PLAY | ||
134 | #define WPS_RC_INCVOL BUTTON_RC_VOL_UP | ||
135 | #define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN | ||
136 | #define WPS_RC_EXIT BUTTON_RC_STOP | ||
137 | |||
138 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
139 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
140 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
141 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
142 | #define WPS_PREV_PRE BUTTON_LEFT | ||
143 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
144 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
145 | #define WPS_INCVOL BUTTON_UP | ||
146 | #define WPS_DECVOL BUTTON_DOWN | ||
147 | #define WPS_PAUSE BUTTON_OFF | ||
148 | /* #define WPS_MENU Ondio can't have both main menu and context menu in wps */ | ||
149 | #define WPS_BROWSE (BUTTON_MENU | BUTTON_REL) | ||
150 | #define WPS_BROWSE_PRE BUTTON_MENU | ||
151 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_DOWN) | ||
152 | #define WPS_EXIT (BUTTON_OFF | BUTTON_REPEAT) | ||
153 | #define WPS_CONTEXT (BUTTON_MENU | BUTTON_REPEAT) | ||
154 | |||
155 | #elif CONFIG_KEYPAD == GMINI100_PAD | ||
156 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
157 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
158 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
159 | #define WPS_PREV_PRE BUTTON_LEFT | ||
160 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
161 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
162 | #define WPS_INCVOL BUTTON_UP | ||
163 | #define WPS_DECVOL BUTTON_DOWN | ||
164 | #define WPS_PAUSE BUTTON_PLAY | ||
165 | #define WPS_MENU (BUTTON_MENU | BUTTON_REL) | ||
166 | #define WPS_MENU_PRE BUTTON_MENU | ||
167 | #define WPS_BROWSE (BUTTON_ON | BUTTON_REL) | ||
168 | #define WPS_BROWSE_PRE BUTTON_ON | ||
169 | #define WPS_EXIT BUTTON_OFF | ||
170 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_DOWN) | ||
171 | #define WPS_ID3 (BUTTON_MENU | BUTTON_ON) | ||
172 | |||
173 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_NANO_PAD) | ||
174 | |||
175 | /* TODO: Check WPS button assignments */ | ||
176 | |||
177 | #define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) | ||
178 | #define WPS_NEXT_PRE BUTTON_RIGHT | ||
179 | #define WPS_PREV (BUTTON_LEFT | BUTTON_REL) | ||
180 | #define WPS_PREV_PRE BUTTON_LEFT | ||
181 | #define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) | ||
182 | #define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) | ||
183 | #define WPS_INCVOL BUTTON_UP | ||
184 | #define WPS_DECVOL BUTTON_DOWN | ||
185 | #define WPS_PAUSE BUTTON_OFF | ||
186 | /* #define WPS_MENU iPod can't have both main menu and context menu in wps */ | ||
187 | #define WPS_BROWSE (BUTTON_MENU | BUTTON_REL) | ||
188 | #define WPS_BROWSE_PRE BUTTON_MENU | ||
189 | #define WPS_KEYLOCK (BUTTON_MENU | BUTTON_DOWN) | ||
190 | #define WPS_EXIT (BUTTON_OFF | BUTTON_REPEAT) | ||
191 | #define WPS_CONTEXT (BUTTON_MENU | BUTTON_REPEAT) | ||
192 | |||
193 | #endif | ||
194 | |||
195 | /* constants used in line_type and as refresh_mode for wps_refresh */ | ||
196 | #define WPS_REFRESH_STATIC 1 /* line doesn't change over time */ | ||
197 | #define WPS_REFRESH_DYNAMIC 2 /* line may change (e.g. time flag) */ | ||
198 | #define WPS_REFRESH_SCROLL 4 /* line scrolls */ | ||
199 | #define WPS_REFRESH_PLAYER_PROGRESS 8 /* line contains a progress bar */ | ||
200 | #define WPS_REFRESH_PEAK_METER 16 /* line contains a peak meter */ | ||
201 | #define WPS_REFRESH_ALL 0xff /* to refresh all line types */ | ||
202 | /* to refresh only those lines that change over time */ | ||
203 | #define WPS_REFRESH_NON_STATIC (WPS_REFRESH_ALL & ~WPS_REFRESH_STATIC & ~WPS_REFRESH_SCROLL) | ||
204 | |||
205 | /* alignments */ | ||
206 | #define WPS_ALIGN_RIGHT 32 | ||
207 | #define WPS_ALIGN_CENTER 64 | ||
208 | #define WPS_ALIGN_LEFT 128 | ||
209 | |||
210 | |||
211 | extern bool keys_locked; | ||
212 | /* wps_data*/ | ||
213 | |||
214 | #ifdef HAVE_LCD_BITMAP | ||
215 | struct gui_img{ | ||
216 | unsigned char* ptr; /* pointer */ | ||
217 | int x; /* x-pos */ | ||
218 | int y; /* y-pos */ | ||
219 | int w; /* width */ | ||
220 | int h; /* height */ | ||
221 | bool loaded; /* load state */ | ||
222 | bool display; /* is to be displayed */ | ||
223 | bool always_display; /* not using the preload/display mechanism */ | ||
224 | }; | ||
225 | #endif | ||
226 | |||
227 | struct align_pos { | ||
228 | char* left; | ||
229 | char* center; | ||
230 | char* right; | ||
231 | }; | ||
232 | |||
233 | #ifdef HAVE_LCD_BITMAP | ||
234 | #define MAX_IMAGES (26*2) /* a-z and A-Z */ | ||
235 | #define IMG_BUFSIZE (LCD_HEIGHT * LCD_WIDTH * MAX_IMAGES/25) / 8 | ||
236 | #define WPS_MAX_LINES (LCD_HEIGHT/5+1) | ||
237 | #define FORMAT_BUFFER_SIZE 3072 | ||
238 | #else | ||
239 | #define WPS_MAX_LINES 2 | ||
240 | #define FORMAT_BUFFER_SIZE 400 | ||
241 | #endif | ||
242 | #define WPS_MAX_SUBLINES 12 | ||
243 | #define DEFAULT_SUBLINE_TIME_MULTIPLIER 20 /* (10ths of sec) */ | ||
244 | #define BASE_SUBLINE_TIME 10 /* base time that multiplier is applied to | ||
245 | (1/HZ sec, or 100ths of sec) */ | ||
246 | #define SUBLINE_RESET -1 | ||
247 | |||
248 | /* wps_data | ||
249 | this struct old all necessary data which describes the | ||
250 | viewable content of a wps */ | ||
251 | struct wps_data | ||
252 | { | ||
253 | #ifdef HAVE_LCD_BITMAP | ||
254 | struct gui_img img[MAX_IMAGES]; | ||
255 | unsigned char img_buf[IMG_BUFSIZE]; | ||
256 | #endif | ||
257 | #ifdef HAVE_LCD_CHARCELLS | ||
258 | unsigned char wps_progress_pat[8]; | ||
259 | bool full_line_progressbar; | ||
260 | #endif | ||
261 | char format_buffer[FORMAT_BUFFER_SIZE]; | ||
262 | char* format_lines[WPS_MAX_LINES][WPS_MAX_SUBLINES]; | ||
263 | struct align_pos format_align[WPS_MAX_LINES][WPS_MAX_SUBLINES]; | ||
264 | unsigned char line_type[WPS_MAX_LINES][WPS_MAX_SUBLINES]; | ||
265 | unsigned short time_mult[WPS_MAX_LINES][WPS_MAX_SUBLINES]; | ||
266 | long subline_expire_time[WPS_MAX_LINES]; | ||
267 | int curr_subline[WPS_MAX_LINES]; | ||
268 | bool wps_loaded; | ||
269 | bool peak_meter_enabled; | ||
270 | }; | ||
271 | |||
272 | /* initial setup of wps_data */ | ||
273 | void wps_data_init(struct wps_data *wps_data); | ||
274 | |||
275 | /* to setup up the wps-data from a format-buffer (isfile = false) | ||
276 | from a (wps-)file (isfile = true)*/ | ||
277 | bool wps_data_load(struct wps_data *wps_data, const char *buf, bool isfile, bool display); | ||
278 | |||
279 | /* wps_data end */ | ||
280 | |||
281 | /* wps_state | ||
282 | holds the data which belongs to the current played track, | ||
283 | the track which will be played afterwards, current path to the track | ||
284 | and some status infos */ | ||
285 | struct wps_state | ||
286 | { | ||
287 | bool ff_rewind; | ||
288 | bool paused; | ||
289 | int ff_rewind_count; | ||
290 | bool wps_time_countup; | ||
291 | struct mp3entry* id3; | ||
292 | struct mp3entry* nid3; | ||
293 | char current_track_path[MAX_PATH+1]; | ||
294 | }; | ||
295 | |||
296 | /* initial setup of wps_data */ | ||
297 | void wps_state_init(void); | ||
298 | |||
299 | /* change the ff/rew-status | ||
300 | if ff_rew = true then we are in skipping mode | ||
301 | else we are in normal mode */ | ||
302 | void wps_state_update_ff_rew(bool ff_rew); | ||
303 | |||
304 | /* change the paused-status | ||
305 | to indicate if playback is currently paused or not */ | ||
306 | void wps_state_update_paused(bool paused); | ||
307 | |||
308 | /* change the path to the current played track */ | ||
309 | void wps_state_update_ctp(const char *path); | ||
310 | |||
311 | /* change the tag-information of the current played track | ||
312 | and the following track */ | ||
313 | void wps_state_update_id3_nid3(struct mp3entry *id3, struct mp3entry *nid3); | ||
314 | /* wps_state end*/ | ||
315 | |||
316 | /* gui_wps | ||
317 | defines a wps with it's data, state, | ||
318 | and the screen on which the wps-content should be drawn */ | ||
319 | struct gui_wps | ||
320 | { | ||
321 | struct screen * display; | ||
322 | struct wps_data *data; | ||
323 | struct wps_state *state; | ||
324 | }; | ||
325 | |||
326 | /* initial setup of a wps */ | ||
327 | void gui_wps_init(struct gui_wps *gui_wps); | ||
328 | |||
329 | /* connects a wps with a format-description of the displayed content */ | ||
330 | void gui_wps_set_data(struct gui_wps *gui_wps, struct wps_data *data); | ||
331 | |||
332 | /* connects a wps with a screen */ | ||
333 | void gui_wps_set_disp(struct gui_wps *gui_wps, struct screen *display); | ||
334 | /* gui_wps end */ | ||
335 | |||
336 | struct gui_syncwps | ||
337 | { | ||
338 | struct gui_wps gui_wps[NB_SCREENS]; | ||
339 | }; | ||
340 | long gui_wps_show(void); | ||
341 | |||
342 | /* currently only on wps_state is needed */ | ||
343 | extern struct wps_state wps_state; | ||
344 | extern struct gui_syncwps gui_syncwps; | ||
345 | extern struct wps_data wps_datas[NB_SCREENS]; | ||
346 | |||
347 | void gui_sync_wps_init(void); | ||
348 | void gui_sync_data_wps_init(void); | ||
349 | void gui_sync_wps_screen_init(void); | ||
350 | |||
351 | #endif | ||