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