FS9795 - some playback cleanup.
[kugel-rb.git] / apps / plugin.h
blobfdcf3c2afa1002d16f47469d8c85404524651d2f
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2002 Björn 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 ****************************************************************************/
21 #ifndef _PLUGIN_H_
22 #define _PLUGIN_H_
24 /* instruct simulator code to not redefine any symbols when compiling plugins.
25 (the PLUGIN macro is defined in apps/plugins/Makefile) */
26 #ifdef PLUGIN
27 #define NO_REDEFINES_PLEASE
28 #endif
30 #ifndef MEM
31 #define MEM 2
32 #endif
34 #include <stdbool.h>
35 #include <sys/types.h>
36 #include <stdarg.h>
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
41 void* plugin_get_buffer(size_t *buffer_size);
43 #ifndef __PCTOOL__
44 #include "config.h"
45 #include "system.h"
46 #include "dir.h"
47 #include "general.h"
48 #include "kernel.h"
49 #include "thread.h"
50 #include "button.h"
51 #include "action.h"
52 #include "usb.h"
53 #include "font.h"
54 #include "lcd.h"
55 #include "metadata.h"
56 #include "sound.h"
57 #include "mpeg.h"
58 #include "audio.h"
59 #include "mp3_playback.h"
60 #include "talk.h"
61 #ifdef RB_PROFILE
62 #include "profile.h"
63 #endif
64 #include "misc.h"
65 #if (CONFIG_CODEC == SWCODEC)
66 #include "dsp.h"
67 #include "codecs.h"
68 #include "playback.h"
69 #include "metadata.h"
70 #ifdef HAVE_RECORDING
71 #include "recording.h"
72 #endif
73 #else
74 #include "mas.h"
75 #endif /* CONFIG_CODEC == SWCODEC */
76 #include "settings.h"
77 #include "timer.h"
78 #include "playlist.h"
79 #ifdef HAVE_LCD_BITMAP
80 #include "screendump.h"
81 #include "scrollbar.h"
82 #include "../recorder/bmp.h"
83 #endif
84 #include "statusbar.h"
85 #include "menu.h"
86 #include "rbunicode.h"
87 #include "list.h"
88 #include "tree.h"
89 #include "color_picker.h"
90 #include "buffering.h"
91 #include "tagcache.h"
92 #include "viewport.h"
93 #include "ata_idle_notify.h"
94 #include "settings_list.h"
95 #include "timefuncs.h"
97 #ifdef HAVE_ALBUMART
98 #include "albumart.h"
99 #endif
101 #ifdef HAVE_REMOTE_LCD
102 #include "lcd-remote.h"
103 #endif
105 #include "yesno.h"
107 #ifdef PLUGIN
109 #if defined(DEBUG) || defined(SIMULATOR)
110 #undef DEBUGF
111 #define DEBUGF rb->debugf
112 #undef LDEBUGF
113 #define LDEBUGF rb->debugf
114 #else
115 #define DEBUGF(...)
116 #define LDEBUGF(...)
117 #endif
119 #ifdef ROCKBOX_HAS_LOGF
120 #undef LOGF
121 #define LOGF rb->logf
122 #else
123 #define LOGF(...)
124 #endif
126 #endif
128 #define PLUGIN_MAGIC 0x526F634B /* RocK */
130 /* increase this every time the api struct changes */
131 #define PLUGIN_API_VERSION 147
133 /* update this to latest version if a change to the api struct breaks
134 backwards compatibility (and please take the opportunity to sort in any
135 new function which are "waiting" at the end of the function table) */
136 #define PLUGIN_MIN_API_VERSION 147
138 /* plugin return codes */
139 enum plugin_status {
140 PLUGIN_OK = 0,
141 PLUGIN_USB_CONNECTED,
142 PLUGIN_ERROR = -1,
145 /* NOTE: To support backwards compatibility, only add new functions at
146 the end of the structure. Every time you add a new function,
147 remember to increase PLUGIN_API_VERSION. If you make changes to the
148 existing APIs then also update PLUGIN_MIN_API_VERSION to current
149 version
151 struct plugin_api {
153 /* lcd */
155 #ifdef HAVE_LCD_CONTRAST
156 void (*lcd_set_contrast)(int x);
157 #endif
158 void (*lcd_update)(void);
159 void (*lcd_clear_display)(void);
160 int (*lcd_getstringsize)(const unsigned char *str, int *w, int *h);
161 void (*lcd_putsxy)(int x, int y, const unsigned char *string);
162 void (*lcd_puts)(int x, int y, const unsigned char *string);
163 void (*lcd_puts_scroll)(int x, int y, const unsigned char* string);
164 void (*lcd_stop_scroll)(void);
165 #ifdef HAVE_LCD_CHARCELLS
166 void (*lcd_define_pattern)(unsigned long ucs, const char *pattern);
167 unsigned long (*lcd_get_locked_pattern)(void);
168 void (*lcd_unlock_pattern)(unsigned long ucs);
169 void (*lcd_putc)(int x, int y, unsigned long ucs);
170 void (*lcd_put_cursor)(int x, int y, unsigned long ucs);
171 void (*lcd_remove_cursor)(void);
172 void (*lcd_icon)(int icon, bool enable);
173 void (*lcd_double_height)(bool on);
174 #else /* HAVE_LCD_BITMAP */
175 fb_data* lcd_framebuffer;
176 void (*lcd_update_rect)(int x, int y, int width, int height);
177 void (*lcd_set_drawmode)(int mode);
178 int (*lcd_get_drawmode)(void);
179 void (*lcd_setfont)(int font);
180 void (*lcd_drawpixel)(int x, int y);
181 void (*lcd_drawline)(int x1, int y1, int x2, int y2);
182 void (*lcd_hline)(int x1, int x2, int y);
183 void (*lcd_vline)(int x, int y1, int y2);
184 void (*lcd_drawrect)(int x, int y, int width, int height);
185 void (*lcd_fillrect)(int x, int y, int width, int height);
186 void (*lcd_mono_bitmap_part)(const unsigned char *src, int src_x, int src_y,
187 int stride, int x, int y, int width, int height);
188 void (*lcd_mono_bitmap)(const unsigned char *src, int x, int y,
189 int width, int height);
190 #if LCD_DEPTH > 1
191 void (*lcd_set_foreground)(unsigned foreground);
192 unsigned (*lcd_get_foreground)(void);
193 void (*lcd_set_background)(unsigned foreground);
194 unsigned (*lcd_get_background)(void);
195 void (*lcd_bitmap_part)(const fb_data *src, int src_x, int src_y,
196 int stride, int x, int y, int width, int height);
197 void (*lcd_bitmap)(const fb_data *src, int x, int y, int width,
198 int height);
199 fb_data* (*lcd_get_backdrop)(void);
200 void (*lcd_set_backdrop)(fb_data* backdrop);
201 #endif
202 #if LCD_DEPTH == 16
203 void (*lcd_bitmap_transparent_part)(const fb_data *src,
204 int src_x, int src_y, int stride,
205 int x, int y, int width, int height);
206 void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
207 int width, int height);
208 void (*lcd_blit_yuv)(unsigned char * const src[3],
209 int src_x, int src_y, int stride,
210 int x, int y, int width, int height);
211 #if defined(TOSHIBA_GIGABEAT_F) || defined(SANSA_E200) || defined(SANSA_C200) \
212 || defined(IRIVER_H10) || defined(COWON_D2) || defined(PHILIPS_HDD1630)
213 void (*lcd_yuv_set_options)(unsigned options);
214 #endif
215 #elif (LCD_DEPTH < 4) && !defined(SIMULATOR)
216 void (*lcd_blit_mono)(const unsigned char *data, int x, int by, int width,
217 int bheight, int stride);
218 void (*lcd_blit_grey_phase)(unsigned char *values, unsigned char *phases,
219 int bx, int by, int bwidth, int bheight,
220 int stride);
221 #endif /* LCD_DEPTH */
222 void (*lcd_puts_style)(int x, int y, const unsigned char *str, int style);
223 void (*lcd_puts_scroll_style)(int x, int y, const unsigned char* string,
224 int style);
225 #ifdef HAVE_LCD_INVERT
226 void (*lcd_set_invert_display)(bool yesno);
227 #endif /* HAVE_LCD_INVERT */
229 #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
230 void (*lcd_activation_set_hook)(void (*enable_hook)(void));
231 struct event_queue *button_queue;
232 #endif
233 unsigned short *(*bidi_l2v)( const unsigned char *str, int orientation );
234 const unsigned char *(*font_get_bits)( struct font *pf, unsigned short char_code );
235 struct font* (*font_load)(const char *path);
236 struct font* (*font_get)(int font);
237 int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
238 int fontnumber);
239 int (*font_get_width)(struct font* pf, unsigned short char_code);
240 void (*screen_clear_area)(struct screen * display, int xstart, int ystart,
241 int width, int height);
242 void (*gui_scrollbar_draw)(struct screen * screen, int x, int y,
243 int width, int height, int items,
244 int min_shown, int max_shown,
245 unsigned flags);
246 #endif /* HAVE_LCD_BITMAP */
247 const char* (*get_codepage_name)(int cp);
249 /* backlight */
250 /* The backlight_* functions must be present in the API regardless whether
251 * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has
252 * no backlight but can be modded to have backlight (it's prepared on the
253 * PCB). This makes backlight an all-target feature API wise, and keeps API
254 * compatible between stock and modded Ondio.
255 * For OLED targets like the Sansa Clip, the backlight_* functions control
256 * the display enable, which has essentially the same effect. */
257 void (*backlight_on)(void);
258 void (*backlight_off)(void);
259 void (*backlight_set_timeout)(int index);
260 #ifdef HAVE_BACKLIGHT_BRIGHTNESS
261 void (*backlight_set_brightness)(int val);
262 #endif /* HAVE_BACKLIGHT_BRIGHTNESS */
264 #if CONFIG_CHARGING
265 void (*backlight_set_timeout_plugged)(int index);
266 #endif
267 bool (*is_backlight_on)(bool ignore_always_off);
268 void (*splash)(int ticks, const char *str);
269 void (*splashf)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
271 #ifdef HAVE_REMOTE_LCD
272 /* remote lcd */
273 void (*lcd_remote_set_contrast)(int x);
274 void (*lcd_remote_clear_display)(void);
275 void (*lcd_remote_puts)(int x, int y, const unsigned char *string);
276 void (*lcd_remote_puts_scroll)(int x, int y, const unsigned char* string);
277 void (*lcd_remote_stop_scroll)(void);
278 void (*lcd_remote_set_drawmode)(int mode);
279 int (*lcd_remote_get_drawmode)(void);
280 void (*lcd_remote_setfont)(int font);
281 int (*lcd_remote_getstringsize)(const unsigned char *str, int *w, int *h);
282 void (*lcd_remote_drawpixel)(int x, int y);
283 void (*lcd_remote_drawline)(int x1, int y1, int x2, int y2);
284 void (*lcd_remote_hline)(int x1, int x2, int y);
285 void (*lcd_remote_vline)(int x, int y1, int y2);
286 void (*lcd_remote_drawrect)(int x, int y, int nx, int ny);
287 void (*lcd_remote_fillrect)(int x, int y, int nx, int ny);
288 void (*lcd_remote_mono_bitmap_part)(const unsigned char *src, int src_x,
289 int src_y, int stride, int x, int y,
290 int width, int height);
291 void (*lcd_remote_mono_bitmap)(const unsigned char *src, int x, int y,
292 int width, int height);
293 void (*lcd_remote_putsxy)(int x, int y, const unsigned char *string);
294 void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
295 void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
296 int style);
297 fb_remote_data* lcd_remote_framebuffer;
298 void (*lcd_remote_update)(void);
299 void (*lcd_remote_update_rect)(int x, int y, int width, int height);
301 void (*remote_backlight_on)(void);
302 void (*remote_backlight_off)(void);
303 void (*remote_backlight_set_timeout)(int index);
304 #if CONFIG_CHARGING
305 void (*remote_backlight_set_timeout_plugged)(int index);
306 #endif
307 #endif /* HAVE_REMOTE_LCD */
308 struct screen* screens[NB_SCREENS];
309 #if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
310 void (*lcd_remote_set_foreground)(unsigned foreground);
311 unsigned (*lcd_remote_get_foreground)(void);
312 void (*lcd_remote_set_background)(unsigned background);
313 unsigned (*lcd_remote_get_background)(void);
314 void (*lcd_remote_bitmap_part)(const fb_remote_data *src, int src_x, int src_y,
315 int stride, int x, int y, int width, int height);
316 void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y, int width,
317 int height);
318 #endif
319 void (*viewport_set_defaults)(struct viewport *vp, enum screen_type screen);
320 int (*viewportmanager_set_statusbar)(int enable_status);
321 /* list */
322 void (*gui_synclist_init)(struct gui_synclist * lists,
323 list_get_name callback_get_item_name, void * data,
324 bool scroll_all,int selected_size,
325 struct viewport parent[NB_SCREENS]);
326 void (*gui_synclist_set_nb_items)(struct gui_synclist * lists, int nb_items);
327 void (*gui_synclist_set_icon_callback)(struct gui_synclist * lists, list_get_icon icon_callback);
328 int (*gui_synclist_get_nb_items)(struct gui_synclist * lists);
329 int (*gui_synclist_get_sel_pos)(struct gui_synclist * lists);
330 void (*gui_synclist_draw)(struct gui_synclist * lists);
331 void (*gui_synclist_select_item)(struct gui_synclist * lists,
332 int item_number);
333 void (*gui_synclist_add_item)(struct gui_synclist * lists);
334 void (*gui_synclist_del_item)(struct gui_synclist * lists);
335 void (*gui_synclist_limit_scroll)(struct gui_synclist * lists, bool scroll);
336 bool (*gui_synclist_do_button)(struct gui_synclist * lists,
337 int *action, enum list_wrap wrap);
338 void (*gui_synclist_set_title)(struct gui_synclist *lists, char* title, int icon);
339 enum yesno_res (*gui_syncyesno_run)(const struct text_message * main_message,
340 const struct text_message * yes_message,
341 const struct text_message * no_message);
342 void (*simplelist_info_init)(struct simplelist_info *info, char* title,
343 int count, void* data);
344 bool (*simplelist_show_list)(struct simplelist_info *info);
346 /* button */
347 long (*button_get)(bool block);
348 long (*button_get_w_tmo)(int ticks);
349 int (*button_status)(void);
350 #ifdef HAVE_BUTTON_DATA
351 intptr_t (*button_get_data)(void);
352 #endif
353 void (*button_clear_queue)(void);
354 int (*button_queue_count)(void);
355 #ifdef HAS_BUTTON_HOLD
356 bool (*button_hold)(void);
357 #endif
358 #ifdef HAVE_TOUCHSCREEN
359 void (*touchscreen_set_mode)(enum touchscreen_mode);
360 #endif
361 #ifdef HAVE_BUTTON_LIGHT
362 void (*buttonlight_set_timeout)(int value);
363 void (*buttonlight_off)(void);
364 void (*buttonlight_on)(void);
365 #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS
366 void (*buttonlight_set_brightness)(int val);
367 #endif /* HAVE_BUTTONLIGHT_BRIGHTNESS */
368 #endif /* HAVE_BUTTON_LIGHT */
370 /* file */
371 int (*open)(const char* pathname, int flags);
372 int (*close)(int fd);
373 ssize_t (*read)(int fd, void* buf, size_t count);
374 off_t (*lseek)(int fd, off_t offset, int whence);
375 int (*creat)(const char *pathname);
376 ssize_t (*write)(int fd, const void* buf, size_t count);
377 int (*remove)(const char* pathname);
378 int (*rename)(const char* path, const char* newname);
379 int (*ftruncate)(int fd, off_t length);
380 off_t (*filesize)(int fd);
381 int (*fdprintf)(int fd, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
382 int (*read_line)(int fd, char* buffer, int buffer_size);
383 bool (*settings_parseline)(char* line, char** name, char** value);
384 void (*storage_sleep)(void);
385 void (*storage_spin)(void);
386 void (*storage_spindown)(int seconds);
387 #if USING_STORAGE_CALLBACK
388 void (*register_storage_idle_func)(storage_idle_notify function);
389 void (*unregister_storage_idle_func)(storage_idle_notify function, bool run);
390 #endif /* USING_STORAGE_CALLBACK */
391 void (*reload_directory)(void);
392 char *(*create_numbered_filename)(char *buffer, const char *path,
393 const char *prefix, const char *suffix,
394 int numberlen IF_CNFN_NUM_(, int *num));
395 bool (*file_exists)(const char *file);
396 char* (*strip_extension)(char* buffer, int buffer_size, const char *filename);
399 /* dir */
400 DIR* (*opendir)(const char* name);
401 int (*closedir)(DIR* dir);
402 struct dirent* (*readdir)(DIR* dir);
403 int (*mkdir)(const char *name);
404 int (*rmdir)(const char *name);
405 bool (*dir_exists)(const char *path);
407 /* kernel/ system */
408 #ifdef CPU_ARM
409 void (*__div0)(void);
410 #endif
411 void (*sleep)(int ticks);
412 void (*yield)(void);
413 volatile long* current_tick;
414 long (*default_event_handler)(long event);
415 long (*default_event_handler_ex)(long event, void (*callback)(void *), void *parameter);
416 unsigned int (*create_thread)(void (*function)(void), void* stack,
417 size_t stack_size, unsigned flags,
418 const char *name
419 IF_PRIO(, int priority)
420 IF_COP(, unsigned int core));
421 void (*thread_exit)(void);
422 void (*thread_wait)(unsigned int thread_id);
423 #if CONFIG_CODEC == SWCODEC
424 void (*thread_thaw)(unsigned int thread_id);
425 #ifdef HAVE_PRIORITY_SCHEDULING
426 int (*thread_set_priority)(unsigned int thread_id, int priority);
427 #endif
428 void (*mutex_init)(struct mutex *m);
429 void (*mutex_lock)(struct mutex *m);
430 void (*mutex_unlock)(struct mutex *m);
431 #endif
433 void (*reset_poweroff_timer)(void);
434 #ifndef SIMULATOR
435 int (*system_memory_guard)(int newmode);
436 long *cpu_frequency;
437 #ifdef HAVE_ADJUSTABLE_CPU_FREQ
438 #ifdef CPU_BOOST_LOGGING
439 void (*cpu_boost_)(bool on_off,char*location,int line);
440 #else
441 void (*cpu_boost)(bool on_off);
442 #endif
443 #endif /* HAVE_ADJUSTABLE_CPU_FREQ */
444 #endif /* !SIMULATOR */
445 #ifdef HAVE_SCHEDULER_BOOSTCTRL
446 void (*trigger_cpu_boost)(void);
447 void (*cancel_cpu_boost)(void);
448 #endif
449 #if NUM_CORES > 1
450 void (*cpucache_flush)(void);
451 void (*cpucache_invalidate)(void);
452 #endif
453 bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
454 long cycles, int int_prio,
455 void (*timer_callback)(void) IF_COP(, int core));
456 void (*timer_unregister)(void);
457 bool (*timer_set_period)(long count);
459 void (*queue_init)(struct event_queue *q, bool register_queue);
460 void (*queue_delete)(struct event_queue *q);
461 void (*queue_post)(struct event_queue *q, long id, intptr_t data);
462 void (*queue_wait_w_tmo)(struct event_queue *q, struct queue_event *ev,
463 int ticks);
464 #if CONFIG_CODEC == SWCODEC
465 void (*queue_enable_queue_send)(struct event_queue *q,
466 struct queue_sender_list *send,
467 unsigned int thread_id);
468 bool (*queue_empty)(const struct event_queue *q);
469 void (*queue_wait)(struct event_queue *q, struct queue_event *ev);
470 intptr_t (*queue_send)(struct event_queue *q, long id,
471 intptr_t data);
472 void (*queue_reply)(struct event_queue *q, intptr_t retval);
473 #endif /* CONFIG_CODEC == SWCODEC */
475 void (*usb_acknowledge)(long id);
476 #ifdef RB_PROFILE
477 void (*profile_thread)(void);
478 void (*profstop)(void);
479 void (*profile_func_enter)(void *this_fn, void *call_site);
480 void (*profile_func_exit)(void *this_fn, void *call_site);
481 #endif
483 #ifdef SIMULATOR
484 /* special simulator hooks */
485 #if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
486 void (*sim_lcd_ex_init)(unsigned long (*getpixel)(int, int));
487 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
488 #endif
489 #endif
491 /* strings and memory */
492 int (*snprintf)(char *buf, size_t size, const char *fmt, ...)
493 ATTRIBUTE_PRINTF(3, 4);
494 int (*vsnprintf)(char *buf, int size, const char *fmt, va_list ap);
495 char* (*strcpy)(char *dst, const char *src);
496 char* (*strncpy)(char *dst, const char *src, size_t length);
497 size_t (*strlen)(const char *str);
498 char * (*strrchr)(const char *s, int c);
499 int (*strcmp)(const char *, const char *);
500 int (*strncmp)(const char *, const char *, size_t);
501 int (*strcasecmp)(const char *, const char *);
502 int (*strncasecmp)(const char *s1, const char *s2, size_t n);
503 void* (*memset)(void *dst, int c, size_t length);
504 void* (*memcpy)(void *out, const void *in, size_t n);
505 void* (*memmove)(void *out, const void *in, size_t n);
506 const unsigned char *_ctype_;
507 int (*atoi)(const char *str);
508 char *(*strchr)(const char *s, int c);
509 char *(*strcat)(char *s1, const char *s2);
510 void *(*memchr)(const void *s1, int c, size_t n);
511 int (*memcmp)(const void *s1, const void *s2, size_t n);
512 char *(*strcasestr) (const char* phaystack, const char* pneedle);
513 char* (*strtok_r)(char *ptr, const char *sep, char **end);
514 /* unicode stuff */
515 const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
516 unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
517 unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
518 unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, int count);
519 unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
520 unsigned long (*utf8length)(const unsigned char *utf8);
521 int (*utf8seek)(const unsigned char* utf8, int offset);
523 /* sound */
524 void (*sound_set)(int setting, int value);
525 int (*sound_default)(int setting);
526 int (*sound_min)(int setting);
527 int (*sound_max)(int setting);
528 const char * (*sound_unit)(int setting);
529 int (*sound_val2phys)(int setting, int value);
530 #ifndef SIMULATOR
531 void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, size_t* size));
532 void (*mp3_play_pause)(bool play);
533 void (*mp3_play_stop)(void);
534 bool (*mp3_is_playing)(void);
535 #if CONFIG_CODEC != SWCODEC
536 void (*bitswap)(unsigned char *data, int length);
537 #endif
538 #endif /* !SIMULATOR */
539 #if CONFIG_CODEC == SWCODEC
540 const unsigned long *audio_master_sampr_list;
541 const unsigned long *hw_freq_sampr;
542 void (*pcm_apply_settings)(void);
543 void (*pcm_play_data)(pcm_more_callback_type get_more,
544 unsigned char* start, size_t size);
545 void (*pcm_play_stop)(void);
546 void (*pcm_set_frequency)(unsigned int frequency);
547 bool (*pcm_is_playing)(void);
548 bool (*pcm_is_paused)(void);
549 void (*pcm_play_pause)(bool play);
550 size_t (*pcm_get_bytes_waiting)(void);
551 void (*pcm_calculate_peaks)(int *left, int *right);
552 void (*pcm_play_lock)(void);
553 void (*pcm_play_unlock)(void);
554 #ifdef HAVE_RECORDING
555 const unsigned long *rec_freq_sampr;
556 void (*pcm_init_recording)(void);
557 void (*pcm_close_recording)(void);
558 void (*pcm_record_data)(pcm_more_callback_type2 more_ready,
559 void *start, size_t size);
560 void (*pcm_record_more)(void *start, size_t size);
561 void (*pcm_stop_recording)(void);
562 void (*pcm_calculate_rec_peaks)(int *left, int *right);
563 void (*audio_set_recording_gain)(int left, int right, int type);
564 #endif /* HAVE_RECORDING */
565 #if INPUT_SRC_CAPS != 0
566 void (*audio_set_output_source)(int monitor);
567 void (*audio_set_input_source)(int source, unsigned flags);
568 #endif
569 void (*dsp_set_crossfeed)(bool enable);
570 void (*dsp_set_eq)(bool enable);
571 void (*dsp_dither_enable)(bool enable);
572 intptr_t (*dsp_configure)(struct dsp_config *dsp, int setting,
573 intptr_t value);
574 int (*dsp_process)(struct dsp_config *dsp, char *dest,
575 const char *src[], int count);
576 #endif /* CONFIG_CODEC == SWCODC */
578 /* playback control */
579 int (*playlist_amount)(void);
580 int (*playlist_resume)(void);
581 int (*playlist_start)(int start_index, int offset);
582 void (*audio_play)(long offset);
583 void (*audio_stop)(void);
584 void (*audio_pause)(void);
585 void (*audio_resume)(void);
586 void (*audio_next)(void);
587 void (*audio_prev)(void);
588 void (*audio_ff_rewind)(long newtime);
589 struct mp3entry* (*audio_next_track)(void);
590 int (*audio_status)(void);
591 struct mp3entry* (*audio_current_track)(void);
592 void (*audio_flush_and_reload_tracks)(void);
593 int (*audio_get_file_pos)(void);
594 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
595 unsigned long (*mpeg_get_last_header)(void);
596 #endif
597 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \
598 (CONFIG_CODEC == SWCODEC)
599 void (*sound_set_pitch)(int pitch);
600 #endif
602 /* MAS communication */
603 #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
604 int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len);
605 int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len);
606 int (*mas_readreg)(int reg);
607 int (*mas_writereg)(int reg, unsigned int val);
608 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
609 int (*mas_codec_writereg)(int reg, unsigned int val);
610 int (*mas_codec_readreg)(int reg);
611 void (*i2c_begin)(void);
612 void (*i2c_end)(void);
613 int (*i2c_write)(int address, const unsigned char* buf, int count );
614 #endif
615 #endif
617 /* menu */
618 int (*do_menu)(const struct menu_item_ex *menu, int *start_selected,
619 struct viewport parent[NB_SCREENS], bool hide_bars);
621 /* scroll bar */
622 struct gui_syncstatusbar *statusbars;
623 void (*gui_syncstatusbar_draw)(struct gui_syncstatusbar * bars, bool force_redraw);
625 /* options */
626 const struct settings_list* (*get_settings_list)(int*count);
627 const struct settings_list* (*find_setting)(const void* variable, int *id);
628 bool (*option_screen)(const struct settings_list *setting,
629 struct viewport parent[NB_SCREENS],
630 bool use_temp_var, unsigned char* option_title);
631 bool (*set_option)(const char* string, const void* variable,
632 enum optiontype type, const struct opt_items* options,
633 int numoptions, void (*function)(int));
634 bool (*set_bool_options)(const char* string, const bool* variable,
635 const char* yes_str, int yes_voice,
636 const char* no_str, int no_voice,
637 void (*function)(bool));
638 bool (*set_int)(const unsigned char* string, const char* unit, int voice_unit,
639 const int* variable, void (*function)(int), int step,
640 int min, int max,
641 void (*formatter)(char*, size_t, int, const char*) );
642 bool (*set_bool)(const char* string, const bool* variable );
644 #ifdef HAVE_LCD_COLOR
645 bool (*set_color)(struct screen *display, char *title, unsigned *color,
646 unsigned banned_color);
647 #endif
648 /* action handling */
649 int (*get_custom_action)(int context,int timeout,
650 const struct button_mapping* (*get_context_map)(int));
651 int (*get_action)(int context, int timeout);
652 bool (*action_userabort)(int timeout);
654 /* power */
655 int (*battery_level)(void);
656 bool (*battery_level_safe)(void);
657 int (*battery_time)(void);
658 #ifndef SIMULATOR
659 unsigned int (*battery_voltage)(void);
660 #endif
661 #if CONFIG_CHARGING
662 bool (*charger_inserted)(void);
663 # if CONFIG_CHARGING >= CHARGING_MONITOR
664 bool (*charging_state)(void);
665 # endif
666 #endif
667 #ifdef HAVE_USB_POWER
668 bool (*usb_powered)(void);
669 #endif
671 /* misc */
672 void (*srand)(unsigned int seed);
673 int (*rand)(void);
674 void (*qsort)(void *base, size_t nmemb, size_t size,
675 int(*compar)(const void *, const void *));
676 int (*kbd_input)(char* buffer, int buflen);
677 struct tm* (*get_time)(void);
678 int (*set_time)(const struct tm *tm);
679 #if CONFIG_RTC
680 time_t (*mktime)(struct tm *t);
681 #endif
682 void* (*plugin_get_buffer)(size_t *buffer_size);
683 void* (*plugin_get_audio_buffer)(size_t *buffer_size);
684 void (*plugin_tsr)(bool (*exit_callback)(bool reenter));
685 char* (*plugin_get_current_filename)(void);
686 #ifdef PLUGIN_USE_IRAM
687 void (*plugin_iram_init)(char *iramstart, char *iramcopy, size_t iram_size,
688 char *iedata, size_t iedata_size);
689 #endif
690 #if defined(DEBUG) || defined(SIMULATOR)
691 void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
692 #endif
693 #ifdef ROCKBOX_HAS_LOGF
694 void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2);
695 #endif
696 struct user_settings* global_settings;
697 struct system_status *global_status;
698 void (*talk_disable)(bool disable);
699 #if CONFIG_CODEC == SWCODEC
700 void (*codec_thread_do_callback)(void (*fn)(void),
701 unsigned int *audio_thread_id);
702 int (*codec_load_file)(const char* codec, struct codec_api *api);
703 const char *(*get_codec_filename)(int cod_spec);
704 #endif
705 bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname);
706 bool (*mp3info)(struct mp3entry *entry, const char *filename);
707 int (*count_mp3_frames)(int fd, int startpos, int filesize,
708 void (*progressfunc)(int));
709 int (*create_xing_header)(int fd, long startpos, long filesize,
710 unsigned char *buf, unsigned long num_frames,
711 unsigned long rec_time, unsigned long header_template,
712 void (*progressfunc)(int), bool generate_toc);
713 unsigned long (*find_next_frame)(int fd, long *offset,
714 long max_offset, unsigned long last_header);
716 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
717 unsigned short (*peak_meter_scale_value)(unsigned short val,
718 int meterwidth);
719 void (*peak_meter_set_use_dbfs)(bool use);
720 bool (*peak_meter_get_use_dbfs)(void);
721 #endif
722 #ifdef HAVE_LCD_BITMAP
723 int (*read_bmp_file)(const char* filename, struct bitmap *bm, int maxsize,
724 int format, const struct custom_format *cformat);
725 void (*screen_dump_set_hook)(void (*hook)(int fh));
726 #endif
727 int (*show_logo)(void);
728 struct tree_context* (*tree_get_context)(void);
729 void (*set_current_file)(char* path);
730 void (*set_dirfilter)(int l_dirfilter);
732 #ifdef HAVE_WHEEL_POSITION
733 int (*wheel_status)(void);
734 void (*wheel_send_events)(bool send);
735 #endif
737 #ifdef IRIVER_H100_SERIES
738 /* Routines for the iriver_flash -plugin. */
739 bool (*detect_original_firmware)(void);
740 bool (*detect_flashed_ramimage)(void);
741 bool (*detect_flashed_romimage)(void);
742 #endif
744 void (*led)(bool on);
746 #if (CONFIG_CODEC == SWCODEC)
747 /* buffering API */
748 int (*bufopen)(const char *file, size_t offset, enum data_type type);
749 int (*bufalloc)(const void *src, size_t size, enum data_type type);
750 bool (*bufclose)(int handle_id);
751 int (*bufseek)(int handle_id, size_t newpos);
752 int (*bufadvance)(int handle_id, off_t offset);
753 ssize_t (*bufread)(int handle_id, size_t size, void *dest);
754 ssize_t (*bufgetdata)(int handle_id, size_t size, void **data);
755 ssize_t (*bufgettail)(int handle_id, size_t size, void **data);
756 ssize_t (*bufcuttail)(int handle_id, size_t size);
758 ssize_t (*buf_get_offset)(int handle_id, void *ptr);
759 ssize_t (*buf_handle_offset)(int handle_id);
760 void (*buf_request_buffer_handle)(int handle_id);
761 void (*buf_set_base_handle)(int handle_id);
762 size_t (*buf_used)(void);
763 #endif
765 #ifdef HAVE_TAGCACHE
766 bool (*tagcache_search)(struct tagcache_search *tcs, int tag);
767 void (*tagcache_search_set_uniqbuf)(struct tagcache_search *tcs,
768 void *buffer, long length);
769 bool (*tagcache_search_add_filter)(struct tagcache_search *tcs,
770 int tag, int seek);
771 bool (*tagcache_get_next)(struct tagcache_search *tcs);
772 bool (*tagcache_retrieve)(struct tagcache_search *tcs, int idxid,
773 int tag, char *buf, long size);
774 void (*tagcache_search_finish)(struct tagcache_search *tcs);
775 long (*tagcache_get_numeric)(const struct tagcache_search *tcs, int tag);
776 #endif
778 #ifdef HAVE_ALBUMART
779 bool (*find_albumart)(const struct mp3entry *id3, char *buf, int buflen);
780 bool (*search_albumart_files)(const struct mp3entry *id3, const char *size_string,
781 char *buf, int buflen);
782 #endif
784 #ifdef HAVE_SEMAPHORE_OBJECTS
785 void (*semaphore_init)(struct semaphore *s, int max, int start);
786 void (*semaphore_wait)(struct semaphore *s);
787 void (*semaphore_release)(struct semaphore *s);
788 #endif
790 const char *appsversion;
791 /* new stuff at the end, sort into place next time
792 the API gets incompatible */
794 #if defined(HAVE_LCD_MODES)
795 void (*lcd_set_mode)(int mode);
796 #endif
799 /* plugin header */
800 struct plugin_header {
801 unsigned long magic;
802 unsigned short target_id;
803 unsigned short api_version;
804 unsigned char *load_addr;
805 unsigned char *end_addr;
806 enum plugin_status(*entry_point)(const void*);
807 const struct plugin_api **api;
810 #ifdef PLUGIN
811 #ifndef SIMULATOR
812 extern unsigned char plugin_start_addr[];
813 extern unsigned char plugin_end_addr[];
814 #define PLUGIN_HEADER \
815 const struct plugin_api *rb DATA_ATTR; \
816 const struct plugin_header __header \
817 __attribute__ ((section (".header")))= { \
818 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
819 plugin_start_addr, plugin_end_addr, plugin_start, &rb };
820 #else /* SIMULATOR */
821 #define PLUGIN_HEADER \
822 const struct plugin_api *rb DATA_ATTR; \
823 const struct plugin_header __header \
824 __attribute__((visibility("default"))) = { \
825 PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
826 NULL, NULL, plugin_start, &rb };
827 #endif /* SIMULATOR */
829 #ifdef PLUGIN_USE_IRAM
830 /* Declare IRAM variables */
831 #define PLUGIN_IRAM_DECLARE \
832 extern char iramcopy[]; \
833 extern char iramstart[]; \
834 extern char iramend[]; \
835 extern char iedata[]; \
836 extern char iend[];
837 /* Initialize IRAM */
838 #define PLUGIN_IRAM_INIT(api) \
839 (api)->plugin_iram_init(iramstart, iramcopy, iramend-iramstart, \
840 iedata, iend-iedata);
841 #else
842 #define PLUGIN_IRAM_DECLARE
843 #define PLUGIN_IRAM_INIT(api)
844 #endif /* PLUGIN_USE_IRAM */
845 #endif /* PLUGIN */
847 int plugin_load(const char* plugin, const void* parameter);
848 void* plugin_get_audio_buffer(size_t *buffer_size);
849 #ifdef PLUGIN_USE_IRAM
850 void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size,
851 char *iedata, size_t iedata_size);
852 #endif
854 /* plugin_tsr,
855 callback returns true to allow the new plugin to load,
856 reenter means the currently running plugin is being reloaded */
857 void plugin_tsr(bool (*exit_callback)(bool reenter));
859 /* defined by the plugin */
860 extern const struct plugin_api *rb;
861 enum plugin_status plugin_start(const void* parameter)
862 NO_PROF_ATTR;
864 #endif /* __PCTOOL__ */
865 #endif