summaryrefslogtreecommitdiff
path: root/apps/gui/gwps.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/gwps.h')
-rw-r--r--apps/gui/gwps.h351
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
211extern bool keys_locked;
212/* wps_data*/
213
214#ifdef HAVE_LCD_BITMAP
215struct 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
227struct 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 */
251struct 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 */
273void 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)*/
277bool 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 */
285struct 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 */
297void 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 */
302void wps_state_update_ff_rew(bool ff_rew);
303
304/* change the paused-status
305 to indicate if playback is currently paused or not */
306void wps_state_update_paused(bool paused);
307
308/* change the path to the current played track */
309void wps_state_update_ctp(const char *path);
310
311/* change the tag-information of the current played track
312 and the following track */
313void 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 */
319struct 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 */
327void gui_wps_init(struct gui_wps *gui_wps);
328
329/* connects a wps with a format-description of the displayed content */
330void gui_wps_set_data(struct gui_wps *gui_wps, struct wps_data *data);
331
332/* connects a wps with a screen */
333void gui_wps_set_disp(struct gui_wps *gui_wps, struct screen *display);
334/* gui_wps end */
335
336struct gui_syncwps
337{
338 struct gui_wps gui_wps[NB_SCREENS];
339};
340long gui_wps_show(void);
341
342/* currently only on wps_state is needed */
343extern struct wps_state wps_state;
344extern struct gui_syncwps gui_syncwps;
345extern struct wps_data wps_datas[NB_SCREENS];
346
347void gui_sync_wps_init(void);
348void gui_sync_data_wps_init(void);
349void gui_sync_wps_screen_init(void);
350
351#endif